我是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"} ]
我的意思是只有一个没有重复项并删除那些完全相同的数组吗?
答案 0 :(得分:1)
您可以将对象映射到对象的字符串化版本,以便随后可以使用.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);
const res = arr.filter((obj, i) => {
const str = JSON.stringify(obj);
return searchable.indexOf(str) === searchable.lastIndexOf(str);
});
console.log(res);
答案 1 :(得分:0)
您可以使用reduce
和Map
let arr = [{key:"1",value:"dog"},{key:"1",value:"dog"},{key:"2",value:"cat"},{key:"3",value:"bird"},{key:"3",value:"bird"}]
let mapper = arr.reduce( (op,inp) => {
let {key} = inp
op.set(key, op.get(key) || {value: inp, count:0})
op.get(key).count++
return op
},new Map())
let final = [...mapper.values()].reduce((op,{value,count}) => {
if(count === 1){
op.push(value)
}
return op
},[])
console.log(final)
答案 2 :(得分:0)
如果可以使用下划线或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');
答案 3 :(得分:0)
使用“ find”方法,您将准确找到要寻找的“ {key:” 2“,value:” cat“}”“。
arr.find((item, index) => {
const foundDup = arr.find((s, sIndex) => sIndex !== index && s.key === item.key);
return !foundDup;
});
答案 4 :(得分:0)
如果您不介意使用库,我强烈建议您使用“ ramda”库。
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"}]
您也可以使用“ lodash”或其他类似的库。