Coding:数组去重

86 阅读1分钟

example

  • 输入:[1,'1',1], 则输出: [1,'1']
  • 输入:[{a: 1}, {b: 1}, {a: 1}], 则输出:[{a: 1}, {b: 1}]
  • 输入:[{a: 1}, {b: 1}, {a: 1}], 则输出:[{a: 1}, {b: 1}]
  • 输入:[{a: 1, b: 2}, {b: 1}, {b: 2, a: 1}], 则输出:[{a: 1, b: 2}, {b: 1}]
  • 输入:[[1, {a: 1}], [2], [3], [1, {a: 1}]], 则输出: [[1, {a: 1}], [2], [3]]

参考1

function unique(arr) {
    const isEqual = (a, b) => {
        if (Array.isArray(a) && Array.isArray(b)) {
            return a.length === b.length? a.every((item, index) => isEqual(item, b[index])) : false;
        }
        if (typeof a === 'object' && typeof b === 'object') {
            return Object.keys(a).length === Object.keys(b).length ? Object.keys(a).every((key) => isEqual(a[key], b[key])) : false;
        }
        return a === b;
    };
    return arr.reduce((accumulator, current) => {
        if (accumulator.findIndex(item => isEqual(current, item)) === -1) {
            accumulator.push(current);
        }
        return accumulator;
    }, []);
}