JavaScript 二维对象数组去重(根据某一属性)

柔情似水 2024-11-06T12:01:13+08:00
0 0 265

引言

在日常开发中,经常会遇到需要对二维对象数组进行去重操作的需求。而对于对象数组的去重,可以根据对象的某一属性进行判断,如果该属性的值相同,则认为对象是重复的。本文将介绍如何利用 JavaScript 实现二维对象数组的去重操作。

去重方法

方法一:使用 filter 和 indexOf

这种方法适用于较小规模的数组。具体思路如下:

  1. 创建一个空数组 result,用于存放去重后的结果。
  2. 遍历原始数组 arr,对于每个对象 obj,判断 objresult 中是否已经存在。如果不存在,则将 obj 添加到 result

下面是具体的代码实现:

function removeDuplicates(arr, prop) {
    var result = [];
    arr.forEach(function(obj) {
        var index = result.findIndex(function(item) {
            return item[prop] === obj[prop];
        });
        if (index === -1) {
            result.push(obj);
        }
    });
    return result;
}

var data = [
    { id: 1, name: 'John' },
    { id: 2, name: 'Jane' },
    { id: 1, name: 'John' },
    { id: 3, name: 'Jim' }
];

var uniqueData = removeDuplicates(data, 'id');
console.log(uniqueData);

上述代码中,我们使用了 Array.prototype.findIndex() 方法来判断对象在 result 中是否已存在。

方法二:使用对象字典

这种方法适用于较大规模的数组。具体思路如下:

  1. 创建一个空对象 dict,用于存放已存在的对象。
  2. 遍历原始数组 arr,对于每个对象 obj,使用 obj[prop] 作为键,在 dict 中查找是否已存在,如果不存在,则将 obj 添加到 dict 中。

下面是具体的代码实现:

function removeDuplicates(arr, prop) {
    var dict = {};
    arr.forEach(function(obj) {
        var key = obj[prop];
        if (!dict[key]) {
            dict[key] = obj;
        }
    });
    return Object.values(dict);
}

var data = [
    { id: 1, name: 'John' },
    { id: 2, name: 'Jane' },
    { id: 1, name: 'John' },
    { id: 3, name: 'Jim' }
];

var uniqueData = removeDuplicates(data, 'id');
console.log(uniqueData);

上述代码中,我们使用了 Object.values() 方法来获取对象字典中的所有值。

总结

本文介绍了两种常见的方法来实现 JavaScript 二维对象数组的去重操作,分别是使用 filter 和 indexOf,以及使用对象字典。根据实际情况选择适合的方法可以提高代码的执行效率。希望本文能帮助你解决相关问题,欢迎拓展和优化这些方法。

相似文章

    评论 (0)