这完全取决于数组的类型。
对于简单的数组,例如字符串数组。您可以像@Redu和@Hugolpz指出的那样使用以下代码:
var arr1 = [1,2,3,4],
arr2 = [2,4],
res = arr1.filter(item => !arr2.includes(item));
console.log(res);
对于更复杂的数组过滤器,例如从另一个对象数组中过滤对象数组,您可以使用以下代码
function filterArray(arr1, arr2) {
return arr1.filter(item1 => !arr2.some(item2 => item1.id === item2.id));
}
或者
function filterArray(arr1, arr2) {
const set = new Set(arr2.map(item => item.id));
return arr1.reduce((filtered, item) => {
if (!set.has(item.id)) {
filtered.push(item);
}
return filtered;
}, []);
}
这两种方法都很高效,即使使用大型数组也能良好运行。但是,在处理大量数据时,使用更高性能的数据结构,例如 Map 或 HashSet,可能会更加优化。
Map
function filterArray(arr1, arr2) {
const map = new Map(arr2.map(item => [item.id, item]));
return arr1.filter(item => !map.has(item.id));
}
哈希集合
function filterArray(arr1, arr2) {
const set = new Set(arr2.map(item => item.id));
return arr1.filter(item => !set.has(item.id));
}
return arrTwo.indexOf(e) === -1;
。 代码:var filteredArr = firstArr.filter(el => secondArr.indexOf(el) === -1);
(将第一个数组中不在第二个数组中的元素筛选出来的代码,可以使用上述语句实现) - Tushar