You need to enable JavaScript to run this app. JavaScript中数据量未知时,如何基于给定JSON数组生成目标键值对对象
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中数据量未知时,如何基于给定JSON数组生成目标键值对对象

现有代码的核心问题

你的实现存在两个关键错误,导致无法得到预期结果:

  • 在循环内触发响应发送:Node.js服务端的HTTP响应仅能发送一次,你在map的每次遍历中都调用res.status(200).json(),会在处理第一个条目时就把响应发回客户端、终止当前请求的流程,后续的遍历逻辑根本不会执行,最终返回的也只是单条内容的零散对象,不是聚合后的完整结构。
  • 动态对象键写法错误:JavaScript的对象字面量中,如果直接写{markName: markValue},生成的对象键是固定的字符串"markName",并不会读取markName变量存储的实际字段名(比如nama_penduduk)。要使用动态变量作为键名,必须用方括号语法包裹变量。
正确实现方式

全程不需要提前预知数组的总条数,核心思路是先把所有条目聚合到同一个目标对象中,全部处理完成后再统一发送一次响应:

  1. 从原始返回数据中取出存储条目的data数组
  2. 逐一遍历数组中的每个条目,把markname作为对象键、markvalue作为对应键的属性值,写入初始为空的目标对象
  3. 所有条目遍历完成后,再调用响应方法返回最终的对象

推荐使用数组reduce的聚合写法:

// 取出条目列表数组
const entryList = dataResult.data;

// 自动遍历所有条目聚合为目标对象,初始值为空对象
const newJSON = entryList.reduce((accumulator, currentEntry) => {
  // 方括号语法实现动态键名绑定
  accumulator[currentEntry.markname] = currentEntry.markvalue;
  return accumulator;
}, {});

// 全部处理完成后,统一返回一次响应
res.status(200).json(newJSON);

如果偏好可读性更高的forEach写法,逻辑完全等价:

const newJSON = {};
// 无论数组有多少条目,forEach都会自动遍历完全部元素
dataResult.data.forEach(entry => {
  newJSON[entry.markname] = entry.markvalue;
});
res.status(200).json(newJSON);

上述两种写法都不依赖硬编码的条目数,不管data数组有3条还是300条,都能正确生成预期结构的对象。


内容的提问来源于stack exchange,提问作者Muhammad Rafi Bahrur Rizki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 17:45:04