使用Javascript比较(筛选)动态数组中的多个数组值
我喜欢从另一个数组中筛选出静态数组值,该数组的值在单击时动态更改,并基于该数组创建新的临时数组。如果不做一堆我不想做的if语句或switch语句,我不知道如何做到这一点。我相信有更有效的方法 例如,我得到了这个静态数组:使用Javascript比较(筛选)动态数组中的多个数组值,javascript,jquery,arrays,multidimensional-array,filtering,Javascript,Jquery,Arrays,Multidimensional Array,Filtering,我喜欢从另一个数组中筛选出静态数组值,该数组的值在单击时动态更改,并基于该数组创建新的临时数组。如果不做一堆我不想做的if语句或switch语句,我不知道如何做到这一点。我相信有更有效的方法 例如,我得到了这个静态数组: 0:[ ['productFilters', ['productCat', 'Bottle'], ['productType', 'Double wall airless pump'], ['productMaterial
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。然后从中创建一个新的临时数组
我已经创建了两个数组,一个用于过滤ProductCat,所以如果单击Tube,只有两个条目1,2会从静态数组返回到新的临时数组中。这很好用
我的第一个循环:
for ( p=0; p < newResults.length; p++ ) {
if (newResults[p][0][1] == thisCat) {
tempProArray[p] = newResults[p];
}
}
我遇到的问题是,当我点击不同的过滤器(例如材料)并选择LDPE时。它不只是过滤掉我在第二个临时数组中的一个项目,而是遍历并过滤掉所有两个具有“productCat”值的Tube的项目,然后返回两个项目,因为这两个项目都具有“productMaterial”值的LDPE。为了更快地访问,并且不需要太多嵌套迭代,我建议在一个pro的基础上构建一个具有拆分值的对象,如果找到一个“,”,因为我不依赖于顺序,并且所有属性都是以完全相同的顺序给出的 然后,您可以通过检查所有给定的筛选值与乘积的单个值来筛选数组 var数据=[['productFilters'、['productCat'、['Bottle']、['productType'、['productMaterial'、['PP']、['productSizesMl'、['ProductSizesZo'、['productCat'、'Bottle']、['productType'、[productCat'、'Bottle']、['productType'、'Round Bottle']、['productMaterial'、'LDPE']、['productSizesMl'、'105、260'],['productSizesOz'、'0.55,12.17']]、['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'], 结果=数据。过滤器[p]=>{ var product=Object.createnull; p、 slice1.forEach[key,value]=>product[key]=value.split','; 返回筛选器。每个[key,value]=>product[key]。includeValue; }; console.logresult;
.作为控制台包装{最大高度:100%!重要;顶部:0;}我希望其他人也能为我做很多事情,但堆栈溢出不是一项免费的编码编写服务。你自己想一个算法。你应该看看函数。你可以通过组合使用筛选器和Include来实现你想要的。为什么不使用一个对象而不是多个数组呢me属性?如果你想保持结构,值的数组是否总是以相同的顺序给出?@NinaScholz我已经修改了我的问题,也许你可以帮我解决最后一个我无法解决的问题。
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];
}
}
}
}
0:[
['productFilters',
['productCat', 'Tube'],
['productType', 'Airless'],
['productMaterial', 'LDPE, PP'],
['productSizesMl', '60, 70'],
['productSizesOz', '0.32, 0.38']
]
]