我是靠谱客的博主 犹豫花瓣,最近开发中收集的这篇文章主要介绍js数组交集、并集、差集,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数组交集

1. 利用filter + indexOf

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var intersection = arr1.filter(function (val) {
return arr2.indexOf(val) > -1;
})
console.log(intersection);
// [1, 3, 5]

但这种方法针对是value值比较简单的Number(不包括NaN)、String、Boolean类型, 因为indexOf 本质上还是使用 === 来判断。

2. 利用ES6中 Array.from方法及Set

function intersect (a, b) {
var bSet = new Set(b);
return Array.from(a.filter(function (val) {
return bSet.has(val);
}));
}
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var intersection = intersect (arr1, arr2);
console.log(intersection);
// [1, 3, 5, NaN]

 可以解决NaN

3. 利用ES7中数组新增的includes + filter

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var intersection = arr1.filter(function (val) {
return arr2.includes(val);
})
console.log(intersection);
// [1, 3, 5, NaN]

 数组并集

1. 利用filter + indexOf

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var union= arr1.concat(arr2.filter(function (val) {
return arr1.indexOf(val) === -1;
}))
console.log(union);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN, NaN]

2. 利用ES6中 Array.from方法及Set

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var union= Array.from(new Set(arr1.concat(arr2)));
console.log(union);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN]

3. 利用ES7中新增的includes + filter

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var union= arr1.concat(arr2.filter(function (val) {
return !arr1.includes(val)
}));
console.log(union);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN]

 数组差集

1. 利用filter + indexOf

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var difference = arr1.filter(function (val) {
return arr2.indexOf(val) === -1;
}).concat(arr2.filter(function (val) {
return arr1.indexOf(val) === -1
}));
console.log(difference);
//  [2, 4, 6, 7, 8, 9, NaN, NaN]

2. 利用ES6中 Array.from方法及Set

function difference (a, b) {
var aSet = new Set(a), bSet = new Set(b);
return Array.from(new Set(a.concat(b).filter(function (val) {
return !aSet.has(val) || !bSet.has(val)
})))
}
var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var differenceVal = difference (arr1, arr2);
console.log(differenceVal );
//  [2, 4, 6, 7, 8, 9]

3. 利用ES7中新增的includes + filter

var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, NaN], arr2 = [1, 3, 5, NaN];
var difference = arr1.concat(arr2).filter(function (val) {
return
!a.includes(val) || !b.includes(val)
});
console.log(difference);
// [2, 4, 6, 7, 8, 9]

最后

以上就是犹豫花瓣为你收集整理的js数组交集、并集、差集的全部内容,希望文章能够帮你解决js数组交集、并集、差集所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部