美文网首页
使用 hasOwnProperty 碰到的一个问题

使用 hasOwnProperty 碰到的一个问题

作者: 月影霜岚 | 来源:发表于2022-07-19 15:22 被阅读0次

    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 碰到的一个问题

          本文链接:https://www.haomeiwen.com/subject/wmtsirtx.html