0. 环境
使用 uni-app
开发编译小程序
开发工具版本号:RC 1.06.2205231
调试基础库:2.21.3
1. 开发场景:
接口返回数据格式如下
[
{"areaCode":"3302*******","areaName":"海曙区","value1":1,"value2":2,"value3":3,"value1":4}
]
在统计总数时,需要对数组的每一项的value
进行累加。因为多个地方会用到valueFields,原先计划是在data
中管理所有需要用到的属性名,为了方便记录直接写在开头
const valueFields = ['value1','value2','value3','value4']
const data = [] // 接口统计数据
const areaCode = "3302";
const calData = data.filter(item => areaCode ? item.areaCode.startsWith(areaCode) : true).reduce((obj,
cur) => {
valueFields.forEach(_k => {
if (!obj.hasOwnProperty(_k)) {
obj[_k] = cur[_k]
return
}
obj[_k] += cur[_k]
})
return obj
}, {})
2. 发现问题
然而实际在跑了之后,微信开发工具模拟器反复跳出长时间未响应
错误,提示可能是逻辑复杂或者进入了死循环,在不断的删减代码后发现只要把上面的hasOwnProperty
去掉,并且在reduce 写上初始值,这样就没问题了
修正后的代码段
const calData = data.filter(item => areaCode ? item.areaCode.startsWith(areaCode) : true).reduce((obj,
cur) => {
/**
* 这里用hasOwnProperty判断是否有属性时,模拟器会判断逻辑复杂
*/
valueFields.forEach(_k => {
obj[_k] += cur[_k]
})
return obj
}, {
value1: 0,value2: 0,
value3: 0,value4: 0,
})
这个问题不是百分百出现的,多个地方也使用统一管理并且使用hasOwnProperty
动态添加累计求和的属性。