JS取出两个数组中的不同或相同元素(简易方法)
一、使用 concat 和 filter 取出不同的元素(取出两个数组的不同元素==>既在arr1又在arr2)
var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1, arr2) { return arr1.concat(arr2).filter(function(v, i, arr) { return arr.indexOf(v) === arr.lastIndexOf(v); }); } console.log(getArrDifference(arr1,arr2)); //输出:(4) [2, 5, 6, 9] concat 用来合并两个数组,也可以写成[...arr1, ...arr2]; filter用来过滤数组,参数arr表示合并后的数组; indexOf表示元素第一次出现的位置,lastIndexOf表示元素最后一次出现的位置。
二、使用 some和 filter 取出相同的元素
var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1, arr2) { return arr1.filter(item =>{ return arr2.some(i=>item==i) // return arr2.some(i=>item.id==i.id) // 数组是对象时 }); } console.log(getArrDifference(arr1,arr2)); //输出:(4) [0, 1, 3, 4]
三、获取两个数组的相同元素(Set、filter、includes)
function getSame(arr1, arr2) { return [...new Set(arr1)].filter(item => arr2.includes(item) // [2, 3, 4, 5]; //!arr2.includes(item) // [1]; 取a1不在a2里面的元素 ) } // eg: var a1 = [1, 2, 3, 3, 4, 5], a2 = [2, 3, 4, 5, 6]; getSame(a1, a2); // [2, 3, 4, 5]
四、取a1不在a2里面的元素
function getSame(arr1, arr2) { return [...new Set(arr1)].filter(item => !arr2.includes(item) ) } // eg: var a1 = [1, 2, 3, 3, 4, 5], a2 = [2, 3, 4, 5, 6]; getSame(a1, a2); //[1]
是我吖~