javascript - 如何从 JavaScript 数组中删除重复的对象?

标签 javascript arrays duplicates unique

从对象数组中删除重复对象的最佳方法是什么?

来自

var arr = 
    [
        {"name":"Joe", "age":17}, 
        {"name":"Bob", "age":17}, 
        {"name":"Carl", "age": 35},
        {"name":"Bob", "age":35},
        {"name":"Joe", "age":17}, 
    ]

当删除重复项时,预期结果是

res= arr = 
    [
        {"name":"Joe", "age":17}, 
        {"name":"Bob", "age":17}, 
        {"name":"Carl", "age": 35},
        {"name":"Bob", "age":35},
    ]

(5 个对象,1 个重复,剩下 4 个)。

每个对象的属性个数是固定的,每个数组的属性名都是一样的。然而,从一个数组到另一个数组,它们可能不仅仅是上面的“name”和“age”,而是属性的名称可以是任何。

@Pointy 请将上述问题中的重复词视为口头意义上的“重复”——分别具有相同数量的属性、相同属性和相同属性值的对象。

这不是 Remove Duplicates from JavaScript Array 的副本

最佳答案

您可以使用对象进行查找,无论是否已插入对象。

编辑:

更新以获取对象的所有属性并使用键的值。如果只有一些属性应该用于它,那么我建议使用带有相关键的数组,比如

['name', 'age']

并与它一起使用

var key = ['name', 'age'].map(function (k) { return a[k]; }).join('|');

var arr = [{ "name": "Joe", "age": 17 }, { "name": "Bob", "age": 17 }, { "name": "Carl", "age": 35 }, { "name": "Bob", "age": 35 }, { "name": "Joe", "age": 17 }],
    filtered = arr.filter(function (a) {
        var key = Object.keys(a).map(function (k) { return a[k]; }).join('|');
        if (!this[key]) {
            return this[key] = true;
        }
    }, Object.create(null));

console.log(filtered);

关于javascript - 如何从 JavaScript 数组中删除重复的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459904/

相关文章:

javascript - 使用 bxslider 将小图像添加到图像 slider 标题?

javascript - 当具有相同的类集时,如何使 div 隐藏?

javascript - 单击跨度时如何更改另一个 div 的内容?

javascript - 使用 JavaScript 挑选不重复的随机数

javascript - 在数组中搜索字符串的最佳方法

javascript - 在 javascript 中,这个语法 `(function(window,undfined)){}(window)` 完成了什么

javascript - 仅在 .includes() 使用 .find() 找到内容时才返回值

java - 如何将一个文件拆分为多个数组,显示它们,并对某些数组进行计算

c - c语言排序数组错误

r - 过滤仅显示重复项的数据框