根据匹配字符串过滤多维数组

时间:2015-06-07 02:32:29

标签: javascript jquery arrays multidimensional-array

我有一个装满产品的多维阵列。我试图通过传递一堆值来过滤我的产品,然后将生成的产品放入一个新的数组中。这就是我想要完成的事情:

products = [['A','2','F','123'],['A','2','G','234'],['B','2','K','231']];
related = [];

filter1 = 'A';
filter2 = '2';
filter3 = 'G';

for(var i = 0; i < products.length; i++) {
  var product = products[i];
  for(var j = 0; j < product.length; j++) {
    if(filter1=product[0]){
      related.push([product[0],product[1]....]);
    }
  }
}

然后从那里,用filter2过滤结果集,依此类推。似乎无法弄清楚这一点。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

这里有一些事情......

首先,看起来你想要Array.prototype.pushapply函数一起使用,可以将数组的内容附加到另一个数组上(而不是将数组作为一个单元附加) )。

Array.prototype.push.appy(related, product);

此外,您希望使用===来检查相等性(单=仅用于分配)。

for(var i = 1; i < products.length; i++) {
  var product = products[i];
  if(filter1 === product[0] && filter2 === product[1] && filter3 === product[2]){
    Array.prototype.push.appy(related, product);
  } 
}

答案 1 :(得分:0)

我想补充一些建议如下:

1)你的最外面的循环从i = 1而不是i = 0开始,所以第一个元素不会被过滤。

2)当您想要应用一组多个过滤器时,您应该考虑使用数组以获得更多便利。

3)要向数组添加新元素,请使用push,而不是= assignment。

所以让我们试试这个:

products = [['A','2','F','123'],['A','2','G','234'],['B','2','K','231']];
related = [];

filters = ['A','2','G'];

for (var product of products) {
    var matchAllFilter = true;
    for (var f of filters){
        if (product.indexOf(f)<0){
            matchAllFilter = false;
            break;
        }
    }    
    if (matchAllFilter){
        related.push(product);
    }
}