Javascript 仅获取数组的唯一值
我是javascript新手,我尝试过使用distinct,但这不是我想要的 示例阵列: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"}, ] 在我尝试的代码中,它只是删除了
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"}]