前端学习

JS 数组去重,包含嵌套对象

2020-10-14  本文已影响0人  格致匠心

女票面字节遇到的题目,复盘的时候帮忙做了一下,复杂度有点大,还借助了api,感觉自己现在算法退步好多。

题目

实现数组去重,数组元素包含嵌套的对。难点:对象是无序的。

输入

const arr = [{a:1}, 1,1,2,3,4,4, {a:1}, {a:1,b:2}, {b:2,a:1}, {a: {b:2,a:1}, b:3}, {b:3, a: {b:2,a:1}}]

代码

// 核心:dfs+JSON.stringfy+key排序
const keySortedObjectStringify = (obj) => {
    const newObj = {};
    Object.keys(obj).sort().forEach(key => {
        const item = obj[key];
        let stringifyItem = item;
        if(typeof item === 'object') {
            if(Array.isArray(item)) {
                stringifyItem = JSON.stringify(item);
            } else {
                stringifyItem = keySortedObjectStringify(item);
            }
        }
        newObj[key] = stringifyItem;
    })
    return JSON.stringify(newObj);
}

const removeDuplication = (arr) => {
    const res = [];
    const map = {};
    for(const item of arr) {
        let stringifyItem = item;
        if(typeof item === 'object') {
            if(Array.isArray(item)) {
                stringifyItem = JSON.stringify(item);
            } else {
                stringifyItem = keySortedObjectStringify(item);
            }
        }
        if(!map[stringifyItem]) {
            map[stringifyItem] = true;
            res.push(item);
        }
    }
    return res;
}

其实代码有个边界条件没考虑好,就是数组可能嵌套复杂元素,不过能过测试样例就行辣。

上一篇 下一篇

猜你喜欢

热点阅读