Javascript 仅获取数组的唯一值

Javascript 仅获取数组的唯一值,javascript,reactjs,Javascript,Reactjs,我是javascript新手,我尝试过使用distinct,但这不是我想要的 示例阵列: let arr = [ {key:"1",value:"dog"}, {key:"1",value:"dog"}, {key:"2",value:"cat"}, {key:"3",value:"bird"}, {key:"3",value:"bird"}, ] 在我尝试的代码中,它只是删除了

我是javascript新手,我尝试过使用distinct,但这不是我想要的

示例阵列:

let arr = [ {key:"1",value:"dog"},
            {key:"1",value:"dog"},
            {key:"2",value:"cat"},
            {key:"3",value:"bird"},
            {key:"3",value:"bird"},
          ]
在我尝试的代码中,它只是删除了重复项,就像

[ {key:"1",value:"dog"},
  {key:"2",value:"cat"},
  {key:"3",value:"bird"}, ]
我怎样才能得到唯一的答案

[ {key:"2",value:"cat"} ]

我的意思是,只有一个没有重复的数组,它会删除那些完全相同的数组。

您可以使用
reduce
Map

让arr=[{key:“1”,value:“dog”},{key:“1”,value:“dog”},{key:“2”,value:“cat”},{key:“3”,value:“bird”},{key:“3”,value:“bird”}]
让mapper=arr.reduce((op,inp)=>{
设{key}=inp
op.set(key,op.get(key)| |{value:inp,count:0})
操作获取(键)。计数++
返回操作
},新映射())
让final=[…mapper.values()].reduce((op,{value,count})=>{
如果(计数==1){
op.push(值)
}
返回操作
},[])

console.log(final)
如果您可以使用下划线或lodash等Javascript库,我建议您查看它们库中的xorBy函数。来自lodash:

_.xorBy([arrays], [iteratee=_.identity])
基本上,您传入的数组在这里是一个对象文字,您传入的属性要删除原始数据数组中的所有重复项,如下所示:

var data = [ {key:"1",value:"dog"}
          , {key:"1",value:"dog"}
          , {key:"2",value:"cat"}
          , {key:"3",value:"bird"}
          , {key:"3",value:"bird"}
          ];
var non_duplidated_data = _.xorBy(data, 'key'); 

Source-

您可以将对象映射到对象的字符串化版本,这样您就可以使用
.indexOf
.lastIndexOf()
来比较找到的对象是否出现在数组中的不同位置,如果最后一个和第一个索引出现在同一位置,则可以说它们是同一个对象(即:副本不存在)并可以保存在结果数组中,如下所示:

const arr=[{key:“1”,value:“dog”},{key:“1”,value:“dog”},{key:“2”,value:“cat”},{key:“3”,value:“bird”},{key:“3”,value:“bird”};
const searchable=arr.map(JSON.stringify);
常数res=arr.filter((obj,i)=>{
const str=JSON.stringify(obj);
返回searchable.indexOf(str)==searchable.lastIndexOf(str);
});
console.log(res);
使用“find”方法,您将得到您要查找的“{key:“2”,value:“cat”}”


如果您不介意使用库,我强烈建议您使用“ramda”库

结果将是:

[{"key": "1", "value": "dog"}, {"key": "2", "value": "cat"}, {"key": "3", "value": "bird"}]

您也可以使用“lodash”或其他类似的库。

OP只查找出现一次的条目,而不只是删除重复的值。这不一样吗。如果删除重复项,您将获得一次出现的条目这就是我要查找的内容我错过了reduce的用途,谢谢,伙计
const arr = [ {key:"1",value:"dog"}
          , {key:"1",value:"dog"}
          , {key:"2",value:"cat"}
          , {key:"3",value:"bird"}
          , {key:"3",value:"bird"}
          ];
const result = R.uniq(arr);
[{"key": "1", "value": "dog"}, {"key": "2", "value": "cat"}, {"key": "3", "value": "bird"}]