打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何根据key合并数组中的对象

原文地址

如何根据key合并数组中的对象(已同步到npm lm-public-js 中)

项目中经常会遇到,array内包含object这个格式的json 需要我们根据一个key去合并其中的对象,一般是 id
效率最低的方法是 循环套循环,找到一致id的,然后添加到其中一个array内
比较好的方法 是把这个id对应的object 暂存一个obj内,比如 obj[item.id] = {...item,...item2}
最后根据 Object.values() 方法 重新转化为数组

    function mergeArrAndObj(data1 = [],data2 = [],key){
        if(!(data1 instanceof Array || data1 instanceof Object)) return console.warn('第一个参数格式不对')
        if(!(data2 instanceof Array || data2 instanceof Object)) return console.warn('第二个参数格式不对')
        if(!((data1 instanceof Array && data2 instanceof Array) || (data1 instanceof Object && data2 instanceof Object))) return console.warn('数据类型不一致')
        
        //都为数组的情况
        if( data1 instanceof Array){
            if(typeof key !== 'string') return console.warn('第三个参数 key 应为字符串')
            if(!key.length) return console.warn('第三个参数 key 长度不应为空')
            if(typeof key === 'undefined') return console.warn('请传入第三个参数 key')

            //找出最长的数组
            let maxArr = data1.length > data2.length ? data1:data2
            //找出最长的数组
            let minArr = data1.length < data2.length ? data1:data2
            //临时存放数据的数组
            let sumArr = []
            //临时存放数据的对象 
            let obj = {}

            maxArr.forEach((item,index)=>{
                //此时短的那一个数组已经循环完了
                if(minArr[index] === undefined){
                    //只需要处理较长的那个数组
                    return obj[item[key]] = {...maxArr[index]}
                }

                //这里是短的那一个数组还没循环完的情况
                obj[item[key]] = {...maxArr[index],...minArr[index]}
            })
            sumArr = Object.values(obj)

            return sumArr
            
        }else{
            //都为对象
            //此处为浅合并 key一致会被替换
            return {...data1,...data2}
        }
        
    }

简单测试一下

    mergeArrAndObj([{id:2,c:2}],[{id:2,a:2},{id:3,a:3}],'id')

    [
        {id:2,c:2,a:2},
        {id:3,a:3}
    ]
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
笔记:《JavaScript面向对象精要》
js数据类型判断和数组判断
js中判断数据类型的几种实用方法
javascript 中把一个数组的内容全部赋值给另外一个数组
Extjs 将store等数组格式传入后台计算
PHP正则按照从大到小的SIGN签名算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服