【问题标题】:How do I filter an array of arrays using an array?如何使用数组过滤数组数组?
【发布时间】:2019-07-08 17:11:44
【问题描述】:

如何根据数组 (result) 过滤数组数组 (myNumbers),以仅获取 myNumbers 中每个数组的 result 中出现的值?

具体来说,给定:

var result = [02, 03, 04, 06, 07, 11, 12, 13];

var myNumbers = [
    [01, 03, 04, 05, 09, 10, 12, 14],
    [01, 03, 04, 05, 06, 08, 10, 12],
    [01, 02, 04, 05, 06, 08, 10, 12],
    [01, 03, 04, 05, 06, 09, 12, 13],
    [01, 02, 03, 05, 06, 08, 10, 11]
];

输出应该是:

[
    [03, 04, 12],
    [03, 04, 06, 12],
    [02, 04, 06, 12],
    [03, 04, 06, 12, 13],
    [02, 03, 06, 11],
]

我一次只能过滤一个数组:

// This only filters it for myNumbers[0]
var confereResult = result.filter(function (number) {
    if (myNumbers[0].indexOf(number) == -1)
            return number;
    console.log(number);
});

我该如何浏览整个列表?

【问题讨论】:

  • 请同时添加想要的结果。
  • 02 在 JavaScript 中的结果是 2。写02的目的是什么?
  • 也不要认为return number 是你想要的。使用此代码 0 永远不会出现在结果中。你可能想要return true(或类似的东西)。

标签: javascript arrays node.js filter


【解决方案1】:

遍历myNumbers 数组并对每一行应用过滤器。

var result = [02, 03, 04, 06, 07, 11, 12, 13];

var myNumbers = [
    [01, 03, 04, 05, 09, 10, 12, 14],
    [01, 03, 04, 05, 06, 08, 10, 12],
    [01, 02, 04, 05, 06, 08, 10, 12],
    [01, 03, 04, 05, 06, 09, 12, 13],
    [01, 02, 03, 05, 06, 08, 10, 11]
];
myNumbers.forEach((arr, i) => {
  myNumbers[i] = arr.filter((val) => {
    return result.indexOf(val) != -1;
  });
});
console.log(myNumbers);

【讨论】:

    【解决方案2】:

    您可以循环 myNumbers 并将结果推送到数组中,例如

    var result = [02, 03, 04, 06, 07, 11, 12, 13];
    
    var myNumbers = [
        [01, 03, 04, 05, 09, 10, 12, 14],
        [01, 03, 04, 05, 06, 08, 10, 12],
        [01, 02, 04, 05, 06, 08, 10, 12],
        [01, 03, 04, 05, 06, 09, 12, 13],
        [01, 02, 03, 05, 06, 08, 10, 11]
    ];
    var confereResult = []
    myNumbers.forEach(function (val) {
      confereResult.push(result.filter(function (number) {
          if (val.indexOf(number) == -1)
                  return number;
      }));
    })
    
    console.log(confereResult)

    【讨论】:

      【解决方案3】:

      您可以映射过滤的结果。

      var filter = [02, 03, 04, 06, 07, 11, 12, 13],
          array = [[01, 03, 04, 05, 09, 10, 12, 14], [01, 03, 04, 05, 06, 08, 10, 12], [01, 02, 04, 05, 06, 08, 10, 12], [01, 03, 04, 05, 06, 09, 12, 13], [01, 02, 03, 05, 06, 08, 10, 11]],
          result = array.map(a => filter.filter(f => a.includes(f)));
      
      console.log(result.map(a => a.join(' ')));
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        猜你喜欢
        • 2017-04-12
        • 1970-01-01
        • 1970-01-01
        • 2013-06-18
        • 2020-01-04
        • 1970-01-01
        • 2021-08-09
        • 2019-08-09
        • 1970-01-01
        相关资源
        最近更新 更多