2017-04-14 37 views
-1

测试条件以检索从对象的值我有一个数组一样如何通过检查阵列

filterVal = [AB, BC, DE]; 和数以百万计的记录。我需要检查,如果record.property值与任何filterVal的那么return true否则返回false匹配。在我的代码

现在的问题是当迭代2次指数的第一个值被清洗。任何人都可以告诉我如何实现这一点。

我的代码。

for(var i=0; i<filterVal.length; i++){ 

     grid.store.filterBy(function(record){ 
      debugger; 
      if(filterVal[i]==record.data[filterProperty]) 
      return true; 
      else 
      return false; 
     }); 
    } 

**Note** : When Going to i=2; all data washed away from 1st one. 
+0

难道你不能只使用'indexOf'来检查数组是否包含该值? – Teemoh

+0

我会首先将'filterVal'数组转换为哈希或映射。这将避免您进行数百万浪费的'indexOf'搜索。 – Redu

回答

1

它在我看来像你使用Extjs,是这种情况?如果是这样,你可能想标记你的问题。

这里是我会做:

grid.store.filterBy(function(record){ 
    return filterVal.indexOf(record.data[filterProperty]) !== -1 
}); 
+0

谢谢@Rafael ..它正在工作。 – David

1

我将在filterBy数组先转换成散列像

{ AB: true, BC: true, DE: true } 

性能。接下来的应该做其余的事情。

var filterMap = ["AB", "BC", "DE"].reduce((p,c) => Object.assign(p,{[c]:true}),{}); 
    result = grid.store.filterBy(record => filterMap[record.data[filterProperty]]); 
+0

让我试试这个并回复你。谢谢你的回答。 – David