鍍金池/ 問(wèn)答/HTML/ 最效率獲得倆個(gè)數(shù)組的相同值

最效率獲得倆個(gè)數(shù)組的相同值

let arr1=['a','b','c','d','e']
let arr2=['c','d','g','h','a']
找到arr1和arr2中相同的值,并在arr2中刪除對(duì)應(yīng)的值
怎么寫(xiě)才更簡(jiǎn)單效率,我只能想到套個(gè)雙層循環(huán),就比如這樣


    arr1.forEach((val)=>{
        arr2.forEach((v,i)=>{
            val === v &&  arr2.splice(i,1)
        })
    })

然后現(xiàn)在問(wèn)題變了
arr2=[{'id':'c'},{'id':'d'},{'id':'g'},{'id':'h'},{'id':'a'}]
我的只要改一個(gè)地方就能繼續(xù)運(yùn)行

arr1.forEach((val)=>{
    arr2.forEach((v,i)=>{
        val === v.id &&  arr2.splice(i,1)
    })
})

你們代碼需要怎么改才能實(shí)現(xiàn)原來(lái)的目的,改動(dòng)最少最簡(jiǎn)單的,我認(rèn)為是最合理的就采納了

回答
編輯回答
夢(mèng)囈

arr1.forEach(function(val){console.log(arr2.indexOf(val))})

這個(gè)并不是完美解決方式,如果有一對(duì)多的情況不行

2017年5月2日 00:40
編輯回答
不歸路

array 轉(zhuǎn) dict

let arr1=['a','b','c','d','e']
let arr2=['c','d','g','h','a']

let obj = arr1.reduce((iter, val) => {
    iter[val] = true
    return iter
}, {})
let result = arr2.filter(v => !obj[v])

console.log(result)
2017年7月22日 08:08
編輯回答
舊言

lodash 大法

_.difference([1,2,4],[2])
2017年3月27日 23:53
編輯回答
還吻

先將arr1放到map中,key=arr1[i],value=true
然后循環(huán)arr2,map中有就刪除。

2018年8月20日 23:50
編輯回答
冷溫柔
arr2 = arr2.filter((n) => !(arr1.findIndex((m) => m == n.id) > -1))

//加個(gè)id就行
2017年5月18日 04:06
編輯回答
空白格
let arr1=['a','b','c','d','e']
let arr2=['c','d','g','h','a']
let res = []
var a = arr2.filter(v => {
    if (arr1.indexOf(v) >= 0) {
        res.push(v)
    }
    return arr1.indexOf(v) < 0
})


res // ["c", "d", "a"]
a // ["g", "h"]
2018年1月12日 05:32