数组对象相同的key值合并,并且把对应的id放到一个数组

1:数组对象相同的key值合并,并且把对应的id放到一个数组

准备数据

let list = [{
            name: 'a',
            id: 1,
            age: 11
        }, {
            name: 'b',
            id: 2,
            age: 22
        }, {
            name: 'c',
            id: 3,
            age: 33
        }, {
            name: 'a',
            id: 4,
            age: 44
        }, {
            name: 'b',
            id: 5,
            age: 55
        }];

处理结果

[{name:'a',id:[1,4]},{name:'b',id:[2,5]},{name:'c',id:[3]}]

第一种:利用find查找的方式处理

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。

<!--首先定义一个空数组-->
var newList = []
list.forEach(item => {
            let newItem = newList.find((i) => i.name == item.name)
            if (!newItem) {
                console.log(newItem);
                newList.push({
                    name: item.name,
                    id: [item.id]
                })
            } else {
                newItem.id.push(item.id)
            }
        })

第二中:利用reduce方法

let Obj = list.reduce((pre,cur,index)=> {
            if(!pre[cur.name]){
                pre[cur["name"]] =[cur.id]
            } else {
                pre[cur.name].push(cur.id)
            }
            return pre;
        },{})
        let aff= Object.keys(Obj).map((item)=>{
            console.log(item);
        return {
                name:item,
                id:Obj[item]
        }})
        console.log(aff)

第三种:使用hash对象

var hash = {};
var i = 0;
var res = [];
list.forEach(function(item) {
    var name = item.name;
    hash[name] ? res[hash[name] - 1].id.push(item.id) : hash[name] = ++i && res.push({
        id: [item.id],
        name: name,
        age: item.age
    })

});

第四种:使用findIndex方法

let arr2 = []
        list.forEach((item, index) => {
            let b = arr2.findIndex(o => o.name === item.name);
            if (b == -1) {
                arr2.push({
                    name: item.name,
                    age: item.age,
                    id: [item.id]
                })
            } else {
                arr2[b].id.push(item.id)
            }
        })
posted @ 2020-07-26 21:24  Angel-01  阅读(1793)  评论(0编辑  收藏  举报