关于 js 2个数组取差集怎么取
关于 js 2个数组取差集怎么取?
例如求var arr1 = [1]; var arr2 = [1,2];的差集
方法一:
Array.prototype.diff = function(a) {
return this.filter(function(i) {return a.indexOf(i) < 0;});
};
[1,2].diff([1]);//[2]
方法二:
var isNaN = Number.isNaN;
var difference = function(arr1, arr2) {
return arr1.reduce(function(previous, i) {
var found = arr2.findIndex(function(j) {
return j === i || (isNaN(i) && isNaN(j));
});
return (found < 0 && previous.push(i), previous);
}, []);
}; var arr1 = [1];
var arr2 = [1, 2]; console.log(difference(arr2, arr1)); //[ 2 ]
方法三:
// ES6 的 Set 来处理,这是真正按照数学上的集合来进行的,不会有重复元素
var subSet = function(arr1, arr2) {
var set1 = new Set(arr1);
var set2 = new Set(arr2); var subset = []; for (let item of set1) {
if (!set2.has(item)) {
subset.push(item);
}
} return subset;
};
//普通方法
var subSet = function(arr1, arr2) {
var len = arr1.length;
var arr = []; while (len--) {
if (arr2.indexOf(arr1[len]) < 0) {
arr.push(arr1[len]);
}
} return arr;
};
方法四:
// 数组求差值
var arr1 = [1, 2, 4, 9, 0];
var arr2 = [2, 4, 7, 8]; var difference = function(arr1, arr2) {
var diff = [];
var tmp = arr2; arr1.forEach(function(val1, i){
if (arr2.indexOf(val1) < 0) {
diff.push(val1);
} else {
tmp.splice(tmp.indexOf(val1), 1);
}
}); console.log(diff.concat(tmp));
} // 输出 [ 1, 9, 0, 7, 8 ]
difference(arr1, arr2);
关于 js 2个数组取差集怎么取的更多相关文章
- 多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量
多动手试试,其实List类型的变量在页面上取到的值可以直接赋值给一个js的Array数组变量,并且数组变量可以直接取到每一个元素var array1 = '<%=yearList =>'; ...
- 从js的repeat方法谈js字符串与数组的扩展方法
js将字符串重复N次的repeat方法的8个版本 /* *@desc: 将一个字符串重复自身N次 */ //版本1:利用空数组的join方法 function repeat(target, n) { ...
- JS Jquery去除数组重复元素
js jquery去除数组中的重复元素 第一种:$.unique() 第二种: for(var i = 0,len = totalArray_line.length;i < len;i++) { ...
- js便利关联数组 及数组定义方式 分类
"http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv=& ...
- lodash源码分析之数组的差集
外部世界那些破旧与贫困的样子,可以使我内心世界得到平衡. --卡尔维诺<烟云> 本文为读 lodash 源码的第十七篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodas ...
- JS实现的数组全排列输出算法
本文实例讲述了JS实现的数组全排列输出算法.分享给大家供大家参考.具体分析如下: 这段js代码对数组进行全排列输出,改进了一些老的代码 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来, ...
- 为什么js的"关联数组"不能转成json字符串而对象可以?
定义这么一个js的“关联数组”: var arr = new Array(); arr[; arr[; alert(JSON.stringify(arr)); 得到的结果如图: [] 一句话,你的 a ...
- jquery ajax post 传递数组 ,多checkbox 取值
jquery ajax post 传递数组 ,多checkbox 取值 http://w8700569.iteye.com/blog/1954396 使用$.each(function(){});可以 ...
- js中的数组
上网查了一下,js中的数组包含的内容还真不少.先给出两个学习的链接: w3school链接:http://www.w3school.com.cn/js/js_obj_array.asp 博客园链接:h ...
随机推荐
- JAVA_Reflection1
package com.qf.reflection1; import java.lang.reflect.Constructor; import java.lang.reflect.Field; im ...
- svn管理代码在cornerstone上无法添加.a 静态库文件
有时候.a静态库不能上传到svn的服务器 导致别人拉代码运行不了 这是因为cornerstone设置里面默认不会提交.a文件, 在上图选项栏里是cornerstone默认忽略上传的文件名后缀,在这里 ...
- cvThreshold
看了很多很坑的文章. 呵呵哒.而且基本上都是一个地方转载的,英文翻译我用你单独给一个词条么?就不能负点儿责? cvThreshold(img4, img3, 0, 128, CV_THRESH_OTS ...
- JavaScript学习总结二(Date对象的用法)
javascript Date对象的常用API 1:创建日期 Date 对象用于处理日期和时间. 可以通过 new 关键词来定义 Date 对象.以下代码定义了名为 myDate 的 Date 对象: ...
- vim纯文本处理插件txtbrowser
纯文本处理插件:txtBrowser 插件作者:http://guoyoooping.blog.163.com/ Github地址:https://github.com/vim-scripts/Txt ...
- Linux 查看文件修改
在以前知道在Linux下查看Tomcat日志文件, tail -f catalina.out 同样的命令"tail -f filename",我就可以看其它日志文件啦: tail ...
- php的传值和传址
有些情况下,可能希望在函数体内对参数的修改在函数体外也能反映; 使用引用传递参数要在参数前加上&符号; 例子: <?php $a=5; function show(&$a){ ...
- Response.Redirect("");Server.Transfer("")跳转页面的区别
Response.Redirect("") Server.Transfer("") 转向其他站点 能 不能(只能站内转向) 是否可带QueryString参 ...
- 第21条:理解Objective-C错误模型
首先要注意的是: “自动引用计数”(Automatic Reference Counting, ARC,参见第30条)在默认情况下不是“异常安全的”(exception safe).具体来说,这意味着 ...
- 修改虚机IP
同网段的话,直接修改,不同网段的话,使用以下方法: 步骤一:nova list --all-tenant 找到相应虚拟机+--------------------------------------+ ...