輸入:
[
{ type: "a", value: 1 },
{ type: "b", value: 2 },
{ type: "a", value: 3 },
{ type: "b", value: 9 }
]
目標:
[
{ type: "a", value: 4 },
{ type: "b", value: 11 }
]
思路一(較簡便)
function sumByType(arr) {
let obj = {}
arr.forEach((item) => {
console.log(obj, item.type, item.value)
if (obj[item.type] !== undefined) {
obj[item.type] += item.value
} else {
obj[item.type] = item.value
}
})
return Object.keys(obj).map((key) => {
return {
type: key,
value: obj[key]
}
})
}
sumByType([
{ type: "a", value: 1 },
{ type: "b", value: 2 },
{ type: "a", value: 3 },
{ type: "b", value: 9 }
])
思路二
function sumByType(arr) {
if (arr.length === 0) return arr
if (!Array.isArray(arr)) return arr
if (
!arr.every(
(item) =>
item.type &&
item.value &&
typeof item.type == "string" &&
item.type.constructor == String &&
typeof item.value == "number"&&
!isNaN(item.value)
)
) {
return arr
}
let types = arr.map((item) => {
return item.type
})
types = Array.from(new Set(types))
return types.map((type) => {
let sametypeArr = arr.filter((item) => item.type === type)
return sametypeArr.reduce(
(pre, cur, index) => {
cur.value = pre.value + cur.value
return cur
},
{ type: sametypeArr[0].type, value: 0 }
)
})
}
sumByType( [{type: 'a', value: 1}, {type: 'b', value: 2}, {type: 'a', value: 3}, {type: 'b', value: 9}])
思路二解析
- 1.先判斷參數格式是否符合標準
- 2.遍歷數組得到所有的type并去重 =>獲得types:[ 'a', 'b' ]
- 3.遍歷arr,把type相同的對象取出作為新的數組 =>獲得sametypeArr:如[ { type: 'a', value: 1 }, { type: 'a', value: 3 } ]的數組
- 4.遍歷sametypeArr把value相加獲得某個type的對象{ type: 'a', value: 4 }
- 5.返回這個對象組成新的數組,即所求結果