对象数组去重

zjy4fun / 2023-07-23 / 原文

 

// 用于判断两个对象是否相等的函数
function isObjectEqual(obj1, obj2) {
    const keys1 = Object.keys(obj1);
    const keys2 = Object.keys(obj2);

    if (keys1.length !== keys2.length) {
        return false;
    }

    for (const key of keys1) {
        if (obj1[key] !== obj2[key]) {
            return false;
        }
    }

    return true;
}

function uniqueArray(arr) {
    const result = []
    for(let i = 0; i < arr.length; i++) {
        const item = arr[i]
        const isExist = result.some((resultItem) => {
            return isObjectEqual(resultItem, item)
        })
        if(!isExist) {
            result.push(item)
        }
    }
    return result
}

const arr = [
    {
        a: 1,
        b: 2
    },
    {
        b: 2,
        a: 1
    },
    {
        a: '1',
        b: 2
    },
    {
        c: 3
    }
];

const deduplicatedArr = uniqueArray(arr);
console.log(deduplicatedArr);

这个问题主要可以拆分成两步

1. 判断两个对象是否相等

2. 去重逻辑