Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript比较(筛选)动态数组中的多个数组值_Javascript_Jquery_Arrays_Multidimensional Array_Filtering - Fatal编程技术网

使用Javascript比较(筛选)动态数组中的多个数组值

使用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

我喜欢从另一个数组中筛选出静态数组值,该数组的值在单击时动态更改,并基于该数组创建新的临时数组。如果不做一堆我不想做的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。然后从中创建一个新的临时数组

我已经创建了两个数组,一个用于过滤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']
    ]
]