TAY
笔记 · · 阅读 132
更新于

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]
目录