比如這樣一個數組:[{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 }) } }) }