去除数组中不同值

    var arr1 = [
      { id: 'aaa1', name: 'a' },
      { id: 'bbb2', name: 'b' },
      { id: 'ccc3', name: 'c' },
      { id: 'ddd4', name: 'd' },
      { id: 'fff5', name: 'f' }
    ]
    var arr2 = ['aaa1', 'bbb2', 'fff5', 'ttyu78']
    两个数组, 其中arr2取的是arr1数组里子对象的id值, 
    当arr2数组里存在与arr1数组子对象的id值不同时, 去除     掉这一项,
    得到arr2 = ['aaa1', 'bbb2', 'fff5'];
    请问有哪些简便方式
阅读 3.2k
5 个回答

简便方式是:

arr2.filter(id => arr1.some(x1 => x1.id === id))

如果 arr1 比较长:

var set1 = new Set(arr1.map(x => x.id))
arr2.filter(id => set1.has(id))

不知是否满足:
image.png

var arr1 = [
    { id: 'aaa1', name: 'a' },
    { id: 'bbb2', name: 'b' },
    { id: 'ccc3', name: 'c' },
    { id: 'ddd4', name: 'd' },
    { id: 'fff5', name: 'f' }
]
var arr2 = ['aaa1', 'bbb2', 'fff5', 'ttyu78']

var newArr = arr1.reduce((curArr, ele) => {
    arr2.includes(ele.id) && curArr.push(ele.id)
    return curArr
}, [])

console.log('新数据', newArr)
const result = arr1.filter(v => arr2.includes(v.id)).map(v=>v.id);
//["aaa1","bbb2","fff5"\]
arr2 = arr2.filter(val => {
    if(JSON.stringify(arr1).indexOf(val) > -1){
        return val
    }
})

有点瑕疵就是如果有别的内容比如name的值刚好和某个id一样,就gg了。严谨的做法是用正则匹配id后面的值,需要的话再说吧。

这是一个求交集的问题。可以试试 ES6 的 Set。

arr1 = arr1.map(item => item['id']);
arr2 = arr2.filter(item => new Set(arr1).has(item));

console.log(arr2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题