2020年12月29日星期二

如何根据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} ]








原文转载:http://www.shaoqun.com/a/504288.html

跨境电商:https://www.ikjzd.com/

周宁:https://www.ikjzd.com/w/1647

amazon go:https://www.ikjzd.com/w/67


原文地址如何根据key合并数组中的对象(已同步到npmlm-public-js中)项目中经常会遇到,array内包含object这个格式的json需要我们根据一个key去合并其中的对象,一般是id效率最低的方法是循环套循环,找到一致id的,然后添加到其中一个array内比较好的方法是把这个id对应的object暂存一个obj内,比如obj[item.id]={...item,...item2}最后
薇美铺:薇美铺
麦言:麦言
到蜈支洲岛旅游怎样乘车:到蜈支洲岛旅游怎样乘车
广州有哪些室内旅游景点?:广州有哪些室内旅游景点?
海螺沟名称的来历(图) - :海螺沟名称的来历(图) -

没有评论:

发表评论