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

从数组中子对象提取数据时返回undefined的问题求助

问题分析与修复

你的代码核心问题是没有正确引用数组transactionLines的索引,导致无法访问到数组内的具体元素,从而返回undefined。具体错误点和修复方案如下:

错误点梳理

  • 内层循环中,直接通过input[i].transactionLines.lineId访问属性,但transactionLines是数组,必须通过索引[j]定位到具体元素后才能读取其属性。
  • 计算总额时,错误使用了input[i].lineValue,这个属性在顶层对象中不存在,应该取transactionLines数组对应元素的lineValue。
  • 日志输出里的input[i].transactionLines.transactionId同样缺少索引,无法获取正确的交易ID值。

修正后的代码

///Dummy JSON Data Stringified and put in the top /////////

const inputData= "[{\r\n\t\t\"transaction\": 1,\r\n\t\t\"store\": 1,\r\n\t\t\"transactionLines\": [{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 3,\r\n\t\t\t\t\"lineValue\": 25\r\n\t\t\t},\r\n\r\n\t\t\t{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 2,\r\n\t\t\t\t\"lineValue\": 50\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 1,\r\n\t\t\t\t\"lineValue\": 100\r\n\t\t\t}\r\n\t\t]\r\n\t},\r\n\t{\r\n\t\t\"transaction\": 2,\r\n\t\t\"store\": 2,\r\n\t\t\"transactionLines\": [{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 2,\r\n\t\t\t\t\"lineValue\": 50\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\t\"transactionId\": 1,\r\n\t\t\t\t\"lineId\": 1,\r\n\t\t\t\t\"lineValue\": 100\r\n\t\t\t}\r\n\t\t]\r\n\t}\r\n]"


const input = JSON.parse(inputData);

var total = 0;

//////   First "For Loop" goes through input data  /////
//////   and lists transactions  ///////////////////////

for(let i=0;i<input.length;i++){
console.log(input[i].transaction);

/////////   2nd "For Loop" is inside the transaction loop.  ////////
/////////   This goes through transaction data from the above loop /
/////////    and lists transactions  ///////////////////////////////

    for(let j=0;j<input[i].transactionLines.length;j++){
        // 获取当前循环的交易明细项
        const lineItem = input[i].transactionLines[j];
        
        // 累加lineValue到总额
        total += lineItem.lineValue;
        
        // 输出当前lineId
        console.log(lineItem.lineId);
        
        // 输出交易ID和更新后的总额
        console.log(`Transaction ID = ${input[i].transaction} loop x ${j}: New Total = ${total}`);
    }
}

关键修改说明

  1. 新增const lineItem = input[i].transactionLines[j];,通过索引j定位到具体的交易明细元素,简化后续代码的可读性。
  2. 总额计算改为total += lineItem.lineValue;,正确引用明细项的lineValue属性。
  3. 所有访问transactionLines内属性的操作,都改为通过lineItem(或直接input[i].transactionLines[j])获取,确保能访问到数组内的具体元素。

内容的提问来源于stack exchange,提问作者Sparx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:32:29