如何返回两个数组的重复对象?

时间:2018-03-21 10:23:05

标签: javascript arrays

让我们说:

var array1 = [{ id: 1 }, { id: 4}, { id: 3 }] 
var array2 = [{ id: 1 }, { id: 2}] 

我知道你可以像这样连接两个数组(没有重复):

Array.from(new Set(array1.concat(array2)))

现在,如何使用 创建一个共享相同值的对象的新数组?

var array2 = [{ id: 1 }] 

3 个答案:

答案 0 :(得分:2)

您可以使用.filter().some()来提取匹配元素:

let array1 = [{ id: 1 }, { id: 4}, { id: 3 }] 
let array2 = [{ id: 1 }, { id: 2}] 

let result = array1.filter(({id}) => array2.some(o => o.id === id));

console.log(result);

有用的资源:

答案 1 :(得分:1)

您可以使用id对象设置一个集并过滤array2

var array1 = [{ id: 1 }, { id: 4}, { id: 3 }] ,
    array2 = [{ id: 1 }, { id: 2}],
    s = new Set(array1.map(({ id }) => id)),
    common = array2.filter(({ id }) => s.has(id));
    
console.log(common);

请求相同对象的相同性。

var array1 = [{ id: 1 }, { id: 4}, { id: 3 }] ,
    array2 = [array1[0], { id: 2}],
    s = new Set(array1),
    common = array2.filter(o => s.has(o));
    
console.log(common);

答案 2 :(得分:1)

根据您的定义,假设对象即使具有相同的结构,也不是真正相同的对象,我定义了一个“相等函数”,然后使用filter和{{1} }:

some