我试图从数组中删除重复的对象。我尝试过使用套装和使用for循环。为什么这些解决方案都不起作用?
var array = [
{"title": "Assistant"},
{"month": "July"},
{"event": "Holiday"},
{"title": "Assistant"}
];
var set = new Set(array);
console.log(set);
let newArray = [];
for(var i = 0; i < array.length; i++){
if(newArray.indexOf(array[i]) === -1){
newArray.push(array[i])
}
}
console.log(newArray);
jsfiddle:https://jsfiddle.net/7uzucqj5/
答案 0 :(得分:1)
您可以使用字符串化对象作为集合的值并使用它进行过滤。
对于具有多个具有不同顺序的属性的对象,它可能无效。
var array = [{ title: "Assistant" }, { month: "July" }, { event: "Holiday" }, { title: "Assistant" }],
hash = new Set,
unique = array.filter(o => !hash.has(JSON.stringify(o)) && hash.add(JSON.stringify(o)));
console.log(unique);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:1)
像这样更改你的代码,如果你有不同顺序的相同元素也可以。
var arr = [
{"title": "Assistant","name":"myname"},
{"month": "July"},
{"event": "Holiday"},
{"name":"myname","title": "Assistant"}
];
var newArr = [];
var temp = [];
for(var i in arr){
var str = JSON.stringify(sort(arr[i]));
if(temp.indexOf(str)){
temp.push(str);
newArr.push(arr[i]);
}
}
function sort(unordered){
const ordered = {};
Object.keys(unordered).sort().forEach(function(key) {
ordered[key] = unordered[key];
});
return ordered;
}
console.log(newArr);
答案 2 :(得分:0)
使用lodash执行此操作的简单而有效的方法是:
_.uniqWith(array, _.isEqual);
这将比较数组中的对象以查找重复项并返回唯一对象数组。 它已经过测试,可以在此jsfiddle上查看。
答案 3 :(得分:0)
您可以尝试以简单的方式使用Set
和map()
函数
var array = [
{"title": "Assistant"},
{"month": "July"},
{"event": "Holiday"},
{"title": "Assistant"}
];
let output4 = [...new Set(array.map(s => JSON.stringify(s)))]
.map(s => JSON.parse(s));
console.log(output4);