• 数组对象相同的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)
                }
            })
    
  • 相关阅读:
    浏览器渲染
    微信h5页面制作总结
    chrome开发工具指南之综述
    零碎记录
    docker 容器已经启动,但是无法访问
    Docker的安装及使用
    python目录选择
    centos7 设置进程开机自启动
    语句中传入变量
    kafka -> structuredStreaming读取kafka日志 ->自定义输出到mysql
  • 原文地址:https://www.cnblogs.com/wgy0528/p/13382124.html
Copyright © 2020-2023  润新知