对象数组去重

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象数组去重相关的知识,希望对你有一定的参考价值。

参考技术A 方法:
1.首先写一个函数把对象中的key排序,然后再转成字符串
2.遍历数组利用Set将转为字符串后的对象去重

js 对象数组 去重


去重 函数unique

function unique(arr, key) {
    if (!arr) return arr
    if (key === undefined) return [...new Set(arr)]
    const map = {
        \'string\': e => e[key],
        \'function\': e => key(e),
    }
    const fn = map[typeof key]
    const obj = arr.reduce((o,e) => (o[fn(e)]=e, o), {})
    return Object.values(obj)
}

普通数组去重

unique([1, 1, 1, 14, 1, 4, 4, 1, 13])

对象数组 去重

const list = [
    { id: 0,    name: \'小明\',    age: 13 },
    { id: 1,    name: \'小明\',    age: 99 },
    { id: 2,    name: \'小明\',    age: 23 },
    { id: 3,    name: \'小红\',    age: 42 },
    { id: 4,    name: \'小明\',    age: 13 },
    { id: 5,    name: \'小芳\',    age: 35 },
    { id: 0,    name: \'小明\',    age: 13 },
    { id: 7,    name: \'\',    age: 23 },
    { id: 8,    name: \'lm\',    age: 22 },
    { id: 9,    name: \'xh\',    age: 79 }
]

unique(list, \'id\')    // id 去重
unique(list, \'age\') // age 去重
unique(list, \'name\')    // name 去重
unique(list, e => e.name + e.age)    // name+age 去重

实现hashcode 去重

function hashcode(str) {
    str = typeof str === \'object\' ? JSON.stringify(str) : str
    var hash = 0, i, chr, len;
    if (str.length === 0) return hash;
    for (i = 0, len = str.length; i < len; i++) {
        chr   = str.charCodeAt(i);
        hash  = ((hash << 5) - hash) + chr;
            hash |= 0; // Convert to 32bit integer
    }
    return hash;
}

unique(list, e => hashcode(e))        // hashcode 去重


以上是关于对象数组去重的主要内容,如果未能解决你的问题,请参考以下文章

数组对象去重

怎么对数组中的对象去重

(去重)JS比较两个数组对象,取出不同的值

es 数组去重,数组里面的对象去重

JavaScript 之 普通数组对象数组的去重(涉及多个场景)

JavaScript 之 普通数组对象数组的去重(涉及多个场景)