关于 js 2个数组取差集怎么取

https://www.cnblogs.com/jiechen/p/5694966.html

 

 

例如求var arr1 = [1]; var arr2 = [1,2];的差集
方法一:

1 Array.prototype.diff = function(a) {
2     return this.filter(function(i) {return a.indexOf(i) < 0;});
3 };
4 [1,2].diff([1]);//[2]  

方法二:

 1 var isNaN = Number.isNaN;
 2 var difference = function(arr1, arr2) {
 3     return arr1.reduce(function(previous, i) {
 4         var found = arr2.findIndex(function(j) {
 5             return j === i || (isNaN(i) && isNaN(j));
 6         });
 7         return (found < 0 && previous.push(i), previous);
 8     }, []);
 9 };
10 
11 
12 var arr1 = [1];
13 var arr2 = [1, 2];
14 
15 console.log(difference(arr2, arr1)); //[ 2 ]

方法三:

 1 // ES6 的 Set 来处理,这是真正按照数学上的集合来进行的,不会有重复元素
 2 var subSet = function(arr1, arr2) {
 3     var set1 = new Set(arr1);
 4     var set2 = new Set(arr2);
 5 
 6     var subset = [];
 7 
 8     for (let item of set1) {
 9         if (!set2.has(item)) {
10             subset.push(item);
11         }
12     }
13 
14     return subset;
15 };
16 //普通方法
17 var subSet = function(arr1, arr2) {
18     var len = arr1.length;
19     var arr = [];
20 
21     while (len--) {
22         if (arr2.indexOf(arr1[len]) < 0) {
23             arr.push(arr1[len]);
24         }
25     }
26 
27     return arr;
28 };

 方法四:

 1 // 数组求差值
 2 var arr1 = [1, 2, 4, 9, 0];
 3 var arr2 = [2, 4, 7, 8];
 4 
 5 var difference = function(arr1, arr2) {
 6   var diff = [];
 7   var tmp = arr2;
 8 
 9   arr1.forEach(function(val1, i){
10     if (arr2.indexOf(val1) < 0) {
11       diff.push(val1);
12     } else {
13       tmp.splice(tmp.indexOf(val1), 1);
14     }
15   });
16 
17   console.log(diff.concat(tmp));
18 }
19 
20 // 输出 [ 1, 9, 0, 7, 8 ]
21 difference(arr1, arr2);

转载于:https://www.cnblogs.com/chaoyuehedy/p/11590617.html

### 回答1: 可以使用 Array.filter() 和 Array.includes() 方法来实现两个数组差集,具体实现可以参考以下代码: ```javascript const arr1 = [1, 2, 3, 4, 5]; const arr2 = [3, 4, 5, 6, 7]; const diff = arr1.filter(item => !arr2.includes(item)); console.log(diff); // [1, 2] ``` 这种方法的时间复杂度为 O(n^2),如果两个数组的长度都很大,效率可能会比较低。可以考虑使用 Set 数据结构来优化,具体实现可以参考以下代码: ```javascript const arr1 = [1, 2, 3, 4, 5]; const arr2 = [3, 4, 5, 6, 7]; const set1 = new Set(arr1); const set2 = new Set(arr2); const diff = [...set1].filter(item => !set2.has(item)); console.log(diff); // [1, 2] ``` 这种方法的时间复杂度为 O(n),效率比较高。 ### 回答2: JavaScript中数组差集指的是两个数组中不重复的元素集合。在计算两个数组差集时,可以使用循环遍历的方式来比较数组中的元素,找出不重复的元素构成差集。 然而,这种方法的效率并不高。假设第一个数组长度为n,第二个数组长度为m,使用循环遍历的方式,需要对第一个数组的每个元素都遍历一次第二个数组,进行比较操作。当n和m都很大时,时间复杂度将会高达O(n*m)。这种方式需要进行多次的比较和遍历操作,效率较低。 为了提高效率,可以借助JavaScript的Set对象来实现数组差集。Set对象是一种类似于数组的数据结构,它只存储唯一的值,可以去除重复元素。可以先将两个数组分别转换为Set对象,然后使用Set的差集相关方法,如Set.prototype.difference方法,从中差集。这种方法的时间复杂度为O(n+m),效率较高。 另外,使用高效的算法和数据结构也是提高差集计算效率的关键。例如,可以使用哈希表来存储数组的元素,以减少比较操作的次数。 总之,计算JavaScript中两个数组差集,使用循环遍历方式的效率较低,可以使用Set对象和其他高效的算法和数据结构来提高效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值