使用Set不工作在对象数组中查找唯一元素

时间:2017-07-19 05:10:18

标签: javascript arrays duplicates set

我有一个对象数组,我试图从中获取独特的元素。我尝试使用Set来获取独特的元素。在对象数组的情况下它不起作用,但在字符串数组等情况下也可以工作。

如何使用set实现此目的?

let data =[{"name":"tagName2"},{"name":"tagName2"}];
console.log(data);  //[ { name: 'tagName2' }, { name: 'tagName2' } ]
console.log((new Set(data)));  //Set { { name: 'tagName2' }, { name: 'tagName2' } }

2 个答案:

答案 0 :(得分:3)

您可以先使用唯一对象过滤数组,然后将其传递给Set,如下所示:

let data =[{"name":"tagName2"},{"name":"tagName2"}];

uniqueData=removeDuplicates(data, "name");

console.log((new Set(uniqueData)));  //Set {{ name: 'tagName2' }}

function removeDuplicates(data, param){
    return data.filter(function(item, pos, array){
        return array.map(function(mapItem){ return mapItem[param]; }).indexOf(item[param]) === pos;
    })
}

答案 1 :(得分:2)

来自docs

  

Set对象允许您存储任何类型的唯一值,无论是否   原始值或对象引用

正如@Tushar指出的那样,这两个对象是不同的。 Set过滤掉对同一对象进行重新渲染的对象。

要使Set正常工作,您需要传入两个对象来复制相同的对象。请查看this小提琴。