使用 hasOwnProperty 碰到的一个问题

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动态添加累计求和的属性。

你可能感兴趣的:(使用 hasOwnProperty 碰到的一个问题)