首页 > 编程语言 > 详细

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

时间:2020-07-26 23:31:55      阅读:283      评论:0      收藏:0      [点我收藏+]

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)
            }
        })

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

原文:https://www.cnblogs.com/wgy0528/p/13382124.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!