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

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

例如求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);
 
时间: 2024-10-03 09:38:05

关于 js 2个数组取差集怎么取的相关文章

从js的repeat方法谈js字符串与数组的扩展方法

js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { return (new Array(n + 1)).join(target); } //版本2:之所以要创建一个带length属性的对象 是因为要调用数据的原型方法,需要指定call的第一个参数为类数组对象 //类数组对象的必要条件是其length属性的值为非负数 function repeat(t

JS Jquery去除数组重复元素

js jquery去除数组中的重复元素 第一种:$.unique() 第二种: for(var i = 0,len = totalArray_line.length;i < len;i++) { !RegExp(totalArray_line[i],"g").test(resultArray_line.join(",")) && (resultArray_line.push(totalArray_line[i])); }-----解决了V0.2

js中的数组对象排序

一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b"

多维数组计算差集

大家都知道一维数组计算差集的内置函数是array_diff_assoc($array1, $array2),可是多维数组怎样计算差集呢,就须要写一个对应的算法. 我写了一个算法供大家參考. <? php //多维数组的差集 function array_diff_assoc_recursive($array1,$array2){     $diffarray=array();     foreach ($array1 as $key=>$value){       //推断数组每一个元素是否是

js实现的数组和CSV格式的相互转换

js实现的数组和CSV格式的相互转换:csv格式就是用逗号分割的值,例如以下形式: 蚂蚁部落,2,antzone,青岛市南区 下面介绍一下csv格式和数组元素的相互转换.一.数组元素转换为CSV格式: var theArray=["蚂蚁部落",2,"antzone","青岛市南区"]; console.log(theArray.join()); 二.csv格式转换为数组元素: var str="蚂蚁部落,2,antzone,青岛市南区&

js取整数与取余数实例详解

分享下js取整数.取余数的方法. 1.丢弃小数部分,保留整数部分parseInt(5/2)2.向上取整,有小数就整数部分加1 Math.ceil(5/2)3,四舍五入.Math.round(5/2)4,向下取整 Math.floor(5/2)Math 对象的方法FF: Firefox, N: Netscape, IE: Internet Explorer方法 描述 FF N IEabs(x) 返回数的绝对值 1 2 3acos(x) 返回数的反余弦值 1 2 3asin(x) 返回数的反正弦值

JS中Array数组的三大属性用法

Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了Array数组的3个属性,length属性.prototype属性.constructor属性使用,并附注Array数组对象的8个分类及多个方法使用,具体如下: 对象的3个属性 1.length属性 length属性 Length属性表示数组的长度,即其中元素的个数.因为数组的索引总是由0开始,所以一个数组的上下限分别是:0和length-

C 语言中的左值和右值。以及对比数组名和指针取数组元素的区别。

左值:出现在赋值符左边的符号有时称为左值. 右值:出现在赋值符右边的符号有时称为右值. 编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址.相反,存储于变量中的值(它的右值)只有在运行时才可知.如果需要用到变量中存储的值,编译器就发出指令从指定地址读入变量值并将它存于寄存器. 可以看到,每个符号的地址在编译时可知. 对比一下几个式子: //常规变量 int a=1;//这里a作为左值出现,代表的是地址,即在a表示的这个内存地址存入数值1.即a代表的内

js如何删除数组中的第一个元素

js如何删除数组中的第一个元素:下面介绍一下如何利用javascript删除数组中的第一个元素,代码如下: var arr=["蚂蚁部落","青岛市南区",2,"antzone"]; console.log(arr); arr.shift(); console.log(arr); 以上代码可以删除数组中的第一个元素,具体可以参阅javascript的Array对象的shift()方法一章节. 原文地址是:http://www.softwhy.co