a = [1,2,3,4,5]
b = [3,4,5]
a只保留[1,2]
先把b中的元素放到 set 中,方便查找,O(1)内就可以查到,但若是在数组内查的话,每次都得遍历,无论是 indexOf 还是 includes。
const a = [1,2,3,4,5];
const b = [3,4,5];
const set = new Set(b);
// 过滤
const filtered = a.filter(item => !set.has(item));
console.log(filtered); // [1, 2]
a = [1,2,3,4,5]
b = [3,4,5]
var c = [...a, ...b].filter(item => !(a.includes(item) && b.includes(item)))
console.log(c)
const a = [1, 2, 3, 4, 5];
const b = [3, 4, 5];
const result = a.filter(item => !b.includes(item));
console.log(result); // 输出 [1, 2]
let a = [1,2,3,4,5]
let b = [3,4,5]
let c = a.filter(item => !b.includes(item))
console.log(c)
const a = [1, 2, 3, 4, 5];
const b = [3, 4, 5];
const result = a.filter((value) => !b.includes(value));
console.log(result); // 输出 [1, 2]
在这段代码中,首先定义了两个数组 a 和 b,然后通过 filter() 方法对数组 a 进行过滤操作,将数组中与数组 b 中的元素相同的元素过滤掉,最终得到的结果即为去重后的数组。
在 filter() 方法中,通过箭头函数定义了一个过滤规则,即如果数组 b 中不包含当前元素,则将其保留下来,否则将其过滤掉。这里使用了 includes() 方法来判断数组 b 是否包含当前元素。
var a = [1, 2, 3, 4, 5], b = [3, 4, 5];
function funm(arr1, arr2) {
let arr = [...arr1, ...arr2];
return arr.filter(item => !(arr1.includes(item) && arr2.includes(item)));
}
console.log(funm(a, b)); //[1,2]
stackoverflow 搬运。
https://stackoverflow.com/questions/1723168/what-is-the-fastest-or-most-elegant-way-to-compute-a-set-difference-using-javasc
建议自己先百度一下,网上解答一大把。
const A = [1, 2, 3, 4];
const B = [1, 3, 4, 7];
const diff = A.filter(x => !B.includes(x));
console.log(diff); // [2]
simply use this function
function deduplication(a, b) {
(a.length < b.length) && ([a, b] = [b, a])
return a.reduce((acc,cur) => (!b.includes(cur) && acc.push(cur), acc), [])
}
要从数组a中移除与数组b中重复的值,可以使用Array.prototype.filter()
方法。以下是一个示例:
const a = [1, 2, 3, 4, 5];
const b = [3, 4, 5];
const result = a.filter((item) => !b.includes(item));
console.log(result); // 输出 [1, 2]
function difference(a, b) {
for (var i = 0; i < b.length; ++i) {
for (var j = a.length; j--;) {
if (b[i] === a[j]) a.splice(j, 1);
}
}
return a;
}
console.log(difference(a, b));
使用 Set 对象去重:将两个数组合并为一个数组,然后将数组转换为 Set 对象,最后将 Set 对象转换为数组即可去重。示例代码如下:
let arr1 = [1, 2, 3];
let arr2 = [2, 3, 4];
let arr3 = [...new Set([...arr1, ...arr2])];
console.log(arr3); // [1, 2, 3, 4]
使用 filter() 方法和 includes() 方法去重:对于第一个数组中的每个元素,判断第二个数组中是否包含该元素,如果不包含,则将该元素保留下来。示例代码如下:
let arr1 = [1, 2, 3];
let arr2 = [2, 3, 4];
let arr3 = arr1.filter(item => !arr2.includes(item)).concat(arr2);
console.log(arr3); // [1, 4, 2, 3]
使用 reduce() 方法和 includes() 方法去重:使用 reduce() 方法遍历第一个数组,将不在第二个数组中的元素添加到结果数组中。然后再将第二个数组中不在结果数组中的元素添加到结果数组中即可。示例代码如下:
let arr1 = [1, 2, 3];
let arr2 = [2, 3, 4];
let arr3 = arr1.reduce((prev, curr) => !arr2.includes(curr) ? prev.concat(curr) : prev, []).concat(arr2.filter(item => !arr1.includes(item)));
console.log(arr3); // [1, 2, 3, 4]
下面适用于数据量较大的情况。另外,如果要去掉多个数组中重复的值,可以将多个数组转换为Set类型,然后使用交集(Intersection)等方法来实现。
const a = [1,2,3,4,5];
const b = [3,4,5];
const setA = new Set(a);
const setB = new Set(b);
const result = [...setA].filter(item => !setB.has(item));
console.log(result); // [1, 2]
let a = [1,2,3,4,5]
let b = [3,4,5]
console.log(Array.from(new Set([...a,...b]))); //两个都行
console.log([...(new Set([...a,...b]))]);
实际上是求两个 set 的并集(union)
const union = (arr1, arr2) => Array.from(
new Set([...arr1, ...arr2])
)
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决