JavaScript如何修复对象数组内不同类型marks属性计算为空的问题
问题根因
JS中数组属于特殊的Object类型,使用typeof判断数组类型时会返回object,无法和普通数值/对象做区分,你需要使用Array.isArray()方法来准确判断变量是否为数组类型。
你原有代码的问题是,当marks为普通数值类型时,dbp.length为undefined,遍历不会执行,所以生成了空数组。
修复思路
先对marks字段做格式归一化:如果判断为非数组类型,就将其包装为单元素数组,后续逻辑统一按数组处理即可,无需额外分支判断。
完整修改后代码
const data=[ { "Id": 1, "marks": [40.25], }, { "Id": 7, "marks": [70,80], }, { "Id": 2, "marks": 60, }, { "Id":5, "marks": [], } ] let res=[] for(var i=0;i<data.length;i++) { let rbp=[] // 新增类型判断,归一化为数组格式 const dbp = Array.isArray(data[i].marks) ? data[i].marks : [data[i].marks] for(var j=0;j<dbp.length;j++) { const tmp=(parseFloat(dbp[j])/80)*(90/100) rbp.push(tmp) } res.push({ iD:data[i].Id, PERCENTAGE:rbp }) } console.log(res)
运行后正确输出
[ { iD: 1, PERCENTAGE: [ 0.45281250000000006 ] }, { iD: 7, PERCENTAGE: [ 0.7875, 0.9 ] }, { iD: 2, PERCENTAGE: [ 0.675 ] }, { iD: 5, PERCENTAGE: [] } ]
内容的提问来源于stack exchange,提问作者riya
相关产品推荐
相关产品推荐

