一尘不染

查找多个JavaScript数组之间的匹配项

javascript

我有多个带有字符串值的数组,我想比较它们,只保留 所有 它们之间相同的匹配结果。

给出以下示例代码:

var arr1 = ['apple', 'orange', 'banana', 'pear', 'fish', 'pancake', 'taco', 'pizza'];
var arr2 = ['taco', 'fish', 'apple', 'pizza'];
var arr3 = ['banana', 'pizza', 'fish', 'apple'];

我想产生以下数组,其中包含来自所有给定数组的匹配项:

['apple', 'fish', 'pizza']

我知道我可以将所有数组组合在一起,var newArr = arr1.concat(arr2, arr3);但这只是给我一个包含所有内容以及重复项的数组。是否可以轻松完成此操作而无需诸如underscore.js之类的库的开销?

编辑 我想我应该提到的是,可能存在未知数量的数组,我只是以3为例。


阅读 333

收藏
2020-05-01

共1个答案

一尘不染

var result = arrays.shift().filter(function(v) {
return arrays.every(function(a) {
return a.indexOf(v) !== -1;
});
});

您可以首先对外部Array进行排序,以在开始时获得最短的Array …

arrays.sort(function(a, b) {
    return a.length - b.length;
});

为了完整起见,这是一个解决数组中重复项的解决方案。它使用.reduce()代替.filter()

var result = arrays.shift().reduce(function(res, v) {
    if (res.indexOf(v) === -1 && arrays.every(function(a) {
        return a.indexOf(v) !== -1;
    })) res.push(v);
    return res;
}, []);
2020-05-01