【问题标题】:Filter Multi-dimension array based on matching string根据匹配字符串过滤多维数组
【发布时间】:2023-03-19 12:56:01
【问题描述】:

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

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 过滤结果集,依此类推。似乎无法弄清楚这一点。非常感谢任何帮助!

【问题讨论】:

    标签: javascript jquery arrays multidimensional-array


    【解决方案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);
      } 
    }
    

    【讨论】:

    • 修复了我的帖子,实际上我在原始代码中已经正确了,但同样的事情也适用,如何使用 filter1/2 过滤相关数组,慢慢使数组变小?
    • @Damien - 如果所有 3 个过滤器都成功,您想将 product 数组添加到 related...?
    • 是的……这太棒了。工作得很漂亮。我也不知道您可以通过执行related.push(product) 来添加数组。我想:related.push([product[0],product[1],product[2]])。绝对可以使代码更简洁。非常感谢!
    【解决方案2】:

    有一些建议我会补充如下:

    1) 您的最外层循环从 i=1 而不是 i=0 开始,因此第一个元素不会被过滤。

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

    3) 要将新元素添加到数组中,请使用 push,而不是 = 赋值。

    让我们试试这个:

    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);
        }
    }
    

    【讨论】:

    • 修复了我的帖子,实际上我在原始代码中已经正确了,但同样的事情也适用,如何使用 filter1/2 过滤相关数组,慢慢使数组变小?
    • 等一下,您是否希望所有过滤器都被应用为 and 操作,例如 filter A,2,G 意味着寻找一个包含所有过滤器的元素A,2,G 而不是 A 或 2 或 G?
    • 实际上,是的...我猜 and 会起作用,除了它是 filter1 == product[0], filter2 == product[1], filter3 == product[2]
    • 好的,我已经相应地修改了我的代码。这样你就可以改变你的过滤器,一个过滤器,两个、三个等都可以工作。只有符合所有过滤条件的产品才会被考虑在内。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多