我想获取一个对象数组,检查多个属性是否同时重复。最后,重复的元素应该被提醒。即对于数组:
[
{
"language" : "english",
"type" : "a",
"value" : "value1"
},
{
"language" : "english",
"type" : "a",
"value" : "value2"
},
{
"language" : "english",
"type" : "b",
"value" : "value3"
},
{
"language" : "spanish",
"type" : "a",
"value" : "valor1"
}
];
警告应该是:“语言英语和类型a的元素过多”。
我一直在寻找它,但答案要么是使 VisualStudio2015 生气的肮脏的 map/reduce 实现,要么是找到完整的副本(不仅基于特定属性)
最佳答案
在性能方面,我认为最好的选择是迭代列表的每个元素,同时更新遇到的键的计数器。
您想在 counter == 2
时发出警报。您不应该测试 counter > 1
,因为当您有超过 2 对具有相同语言和相同类型时,它会重复多次相同的警报。
var list = [{
"language" : "english",
"type" : "a",
"value" : "value1"
},{
"language" : "english",
"type" : "a",
"value" : "value2"
},{
"language" : "english",
"type" : "a",
"value" : "value3"
},{
"language" : "english",
"type" : "b",
"value" : "value3"
},{
"language" : "spanish",
"type" : "a",
"value" : "valor1"
},{
"language" : "spanish",
"type" : "a",
"value" : "valor2"
}];
var counter = {};
list.forEach(function(o) {
var key = o.language + '|' + o.type;
if((counter[key] = (counter[key] || 0) + 1) == 2) {
console.log('Too many elements with language '+o.language+' and type '+o.type);
}
});
关于Javascript - 在对象数组中查找(而不是删除)具有重复属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687685/