如何把一個數組中的物件的key值相等的物件合成一個物件
阿新 • • 發佈:2020-09-23
比如這樣一個數組:[{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 }) } }) }