js中比较两个数组中是否含有相同的元素,可去重,可删除合并为新数组

JavaScript016

js中比较两个数组中是否含有相同的元素,可去重,可删除合并为新数组,第1张

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Document</title>

</head>

<body>

<script>

//做比较的两个数组

var array1 = ['a','b','c','d']//数组1 (所有人)

var array2 = ['a','d']//数组2 (需要删除的人)

//临时数组存放

var tempArray1 = []//临时数组1

var tempArray2 = []//临时数组2

for(var i=0i<array2.lengthi++){

tempArray1[array2[i]]=true//将数array2 中的元素值作为tempArray1 中的键,值为true;

}

for(var i=0i<array1.lengthi++){

if(!tempArray1[array1[i]]){

tempArray2.push(array1[i])//过滤array1 中与array2 相同的元素;

}

}

console.log(tempArray2)

const arrAll = [

{

name: 'a',

code: 'aa',

config: false

},

{

name: 'b',

code: 'bb',

config: true

},

{

name: 'c',

code: 'cc',

config: false

},

{

name: 'd',

code: 'dd',

config: false

}

]

let newarr3 = []

arrAll.map(item =>{

array2.map(list =>{

if (item.name === list) {

newarr3.push({

name: list,

config: true,

code: item.code

})

}

})

})

console.log('333', newarr3)

let newarr4 = []

arrAll.map(item =>{

tempArray2.map(list =>{

if (item.name === list) {

newarr4.push({

name: list,

config: false,

code: item.code

})

}

})

})

console.log('444', newarr4)

console.log('newall', [...newarr3, ...newarr4])

const newarrAll = [...newarr3, ...newarr4]

const newarr5 = []

arrAll.map(item =>{

newarrAll.map(list =>{

if (item.name === list.name) {

newarr5.push({

name: item.name,

config: list.config,

code: item.code

})

}

})

})

console.log('5555', newarr5)

let ques= [

{a:2,b:2},

{a:2, b:2}]

console.log([...new Set(ques.map(e =>JSON.stringify(e)))].map(e =>JSON.parse(e)))

</script>

</body>

</html>

相同的a.filter(function(v){returnb.indexOf(v)>-1})不同的 a.filter(function(v){ return !(b.indexOf(v) >-1) }).concat(b.filter(function(v){ return !(a.indexOf(v) >-1)}))

你这个代码不是 JS 啊,看起来倒有些像 Golang。。。

你没有说明你这个比较的目的,因此如果没有别的要求,那么下面是 JS 的代码:

/**

 * 比较两个数组的重复部分

 * @param {Array.<number>} arr1 数组1

 * @param {Array.<number>} arr2 数组2

 * @return {Array.<number>} 返回一个数组,元素 2*n 是匹配开始的位置,元素 2*n+2是匹配终止的地方

 */

function hutiaCompare(arr1, arr2){

    /** @type {number} */

    var len = Math.min(arr1.length, arr2.length)

    /** @type {Array.<number>} */

    var re = []

    

    for (var i=0 i<len i++){

        // 为了便于你理解,我把下面两个条件分开写了

        // 按我习惯一般会写在一起

        // 条件1:如果匹配,且没有记录过匹配起始位置

        if (arr1[i] == arr2[i] && re.length%2===0) {

            re.push(i)

        // 条件2:如果不匹配,且已经记录过匹配起始位置了

        } else if (arr1[i] != arr2[i] && re.length%2===1){

            re.push(i)

        }

    }

    if (re.length %2 === 1) re.push(i)

    

    return re

}

以上,请采纳,请给分。