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

使用For Loop写入JSON文件仅输出数组最后一项的问题

问题原因

你遇到的问题核心是循环外创建的data对象被重复引用。每次循环你只是修改这个对象的items和key属性,然后把同一个对象的引用推入myrecords数组。循环结束后,数组里所有元素都指向最后一次修改后的data对象,所以最终输出全是最后一项的数据。

修复方案

把data对象的创建逻辑移到循环内部,每次循环都生成一个新的独立对象:

let rawdata = fs.readFileSync('./input_data.json');
let jsondata = JSON.parse(rawdata);
let myrecords = [];

for(let i = 0; i < jsondata.records.length; i++) {
  let obj = jsondata.records[i];
  // 每次循环新建一个data对象
  let data = {
    items: [obj.data],
    key: obj.Id
  };
  myrecords.push(data);
}

var log_file = fs.createWriteStream(__dirname + '/output.json', {flags : 'w'});
var log_stdout = process.stdout;
console.log = function(d) {
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};
console.log(JSON.stringify(myrecords, null, 2))
额外优化建议
  • 可以用forEach循环简化代码,可读性更强:
jsondata.records.forEach(obj => {
  myrecords.push({
    items: [obj.data],
    key: obj.Id
  });
});
  • 注意变量声明:原代码里myrecords没有用let/const声明,会变成全局变量,建议加上const(如果不需要修改数组引用)或let。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:42:46