You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:57:02