我有多个带有字符串值的数组,我想比较它们,只保留 所有 它们之间相同的匹配结果。
给出以下示例代码:
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之类的库的开销?
var newArr = arr1.concat(arr2, arr3);
编辑 我想我应该提到的是,可能存在未知数量的数组,我只是以3为例。
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()…
.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; }, []);