如何把一个数组中的对象的key值相等的对象合成一个对象
比如这样一个数组:[{category:"中国梦",value:"10000"},{category:"有国才有家",value:"1000"},{category:"中国梦",value:"1000"}];把category相同或相等的值的对象中的value相加组合成一个对象;
在面试中,有时候面试官会这样问,“有这样一个数组,数组由对象组成,对象中有两个key/value键值对,这样的对象有若干个,其中有些key值是相等的,请问,如何把这些key值相等的对象提取出来呢”。
在项目中,有时候会遇到一个dataList数组数据,组成该数组的元素是一个对象,对象中的某些key值是相等的,下面有个场景:做一个饼状图,需要把数据中key值相等的对象中的某个数值相加。
上面所描述的两个场景大同小异,其实现的原理也是一样的:定义一个空数组,和一个空对象,还有一个初始值等于0的index索引,在dataList数组循环体中,对空对象中作个判断,判断是否有数组红的对象下的某个key的值,有,则执行某个数值相加的操作,没有,则把该对象push进上面定义的空数组里面(比较抽象可以忽略直接阅读代码);
实现代码如下:
let dataList=[{category:"中国梦",value:"10000"},{category:"有国才有家",value:"1000"},{category:"中国梦",value:"1000"}]; console.log(handle(dataList)); function handle(dataList){ let res=[], obj={}, index=0; arr.forEach(item=>{ if(obj.hasOwnProperty(item.category)){ res[obj[item.category]].value=res[obj[item.category]].value+item.value; }else{ obj[item.category]=index++; res.push({ category:item.category, value:item.valuw }) } }) }