reduce 计算数字数组之和很方便:
let sum = [0, 1, 2, 3].reduce(function (previousValue, currentValue) {
return previousValue + currentValue
})
// sum is 6
但若是对象数组:
var data = [
{
"label": "碱工段",
"value": 0
},
{
"label": "氯工区",
"value": 0
},
{
"label": "乙炔工段",
"value": 0
},
{
"label": "氯乙烯工段",
"value": 0
},
{
"label": "聚合工区",
"value": 0
},
{
"label": "公用工段",
"value": 0
},
{
"label": "设备管理工段",
"value": 0
},
{
"label": "成品工段",
"value": 0
}
]
若此时还用上面直接写会得到:null。正确做法需要稍微处理一下:
var total = data.reduce((prevValue,currentValue)=>{
return prevValue + currentValue.value
},0)
关键是:
- 初始值0,
- 写成 preValue,而非 preValue.value
官方文档已经指出:
StackOverflow 上也有一个相关的提问:
其中两个方法很有意思:
可以看出,需要构造成和原单个数组里的对象相同的结构就成。