我有一个装满产品的多维阵列。我试图通过传递一堆值来过滤我的产品,然后将生成的产品放入一个新的数组中。这就是我想要完成的事情:
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过滤结果集,依此类推。似乎无法弄清楚这一点。非常感谢任何帮助!
答案 0 :(得分:1)
这里有一些事情......
首先,看起来你想要Array.prototype.push
和apply
函数一起使用,可以将数组的内容附加到另一个数组上(而不是将数组作为一个单元附加) )。
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);
}
}