【发布时间】:2018-07-25 04:13:51
【问题描述】:
我喜欢从另一个数组中过滤掉静态数组值,该数组的值在单击时会动态变化,并基于该数组创建新的临时数组。如果不做一堆我不想做的 if 语句或 switch 语句,我不确定如何做到这一点。我相信有更有效的方法。
例如我得到了这个静态数组:
0:[
['productFilters',
['productCat', 'Bottle'],
['productType', 'Double wall airless pump'],
['productMaterial', 'PP'],
['productSizesMl', '10, 15, 60'],
['productSizesOz', '0.12, 0.18, 0.32']
]
],
1:[
['productFilters',
['productCat', 'Tube'],
['productType', 'Round Tube'],
['productMaterial', 'LDPE'],
['productSizesMl', '105, 260'],
['productSizesOz', '0.55, 12.17']
]
],
2:[
['productFilters',
['productCat', 'Tube'],
['productType', 'Airless'],
['productMaterial', 'LDPE, PP'],
['productSizesMl', '60, 70'],
['productSizesOz', '0.32, 0.38']
]
]
然后我们得到了这个动态数组,它的值可以在点击时改变,甚至可以为空。
[
['productCat', 'Tube'],
['productType', 'Airless'],
['productMaterial', 'PP'],
['productSizesMl', '60'],
['productSizesOz', '0.32']
];
基于这些示例,我想比较两个数组并将它们过滤掉。在这一点上,我只会在过滤后取回第二个数组,因为基本上动态数组中的所有值都匹配,即使静态数组具有多个值,例如“productSizesMl”,它仍然会找到“60”。然后从中创建一个新的临时数组。
我创建了 2 个数组,一个用于过滤掉 ProductCat,因此如果您单击 Tube,只有两个项目 (1,2) 将从我的静态数组返回到我的新临时数组中。效果很好。
我的第一个循环:
for ( p=0; p < newResults.length; p++ ) {
if (newResults[p][0][1] == thisCat) {
tempProArray[p] = newResults[p];
}
}
然后我有另一个数组,可以进一步过滤掉我的新临时数组,如果点击它,它适用于第二个过滤器。
第二个临时数组:
for ( f=0; f < tempProArray.length; f++ ) {
newResult = tempProArray[f][1];
for ( k=0; k < newResult[k].length; k++ ) {
if (filterArray[k][1] !== 'none') {
if (newResult[k][1].indexOf(filterArray[k][1]) > -1) {
tempFilterArray[f] = tempProArray[f];
}
}
}
}
filterArray 数组是我改变值的动态数组。基本上,当我单击例如过滤器类型-> 无气时,它会从我的第一个临时数组返回最后一个值,并从中创建另一个临时数组,其中只有一个项目。下面是我的第二个临时数组
0:[
['productFilters',
['productCat', 'Tube'],
['productType', 'Airless'],
['productMaterial', 'LDPE, PP'],
['productSizesMl', '60, 70'],
['productSizesOz', '0.32, 0.38']
]
]
我遇到的问题是当我单击不同的过滤器(例如材料)并选择 LDPE 时。它不仅过滤掉我在第二个临时数组中拥有的一项,还过滤掉所有 2 个具有 Tube 的“productCat”值的项目,然后返回 2 个项目,因为两者都具有 LDPE 的“productMaterial”值。
【问题讨论】:
-
我也希望其他人为我做很多事情,但 Stack Overflow 不是免费的编码写作服务。自己想出一个算法。
-
你应该看看Array函数。您可以使用
filter和includes的组合来实现您想要的。 -
为什么不对某些属性使用单个对象而不是多个数组?如果你想保持结构,值的数组是否总是以相同的顺序和给定的?
-
@NinaScholz 我已经修改了我的问题,也许你可以帮我解决我最后一个我无法弄清楚的问题。
标签: javascript jquery arrays multidimensional-array filtering