如何用JavaScript为JSON数组的子数组批量分配指定键名?
问题:将嵌套数组的JSON转换为键值对对象数组
现有如下结构的JSON数组:
{ "dummyValues": [ [ 0.57, 0.52, 0.51, 0.50 // ... 更多元素 ], [ 0.56, 0.52, 0.50, 0.49, 0.46 // ... 更多元素 ] ] }
需要按顺序为每个子数组的元素分配以下键名集合:
const keys = [ "A", "B", "C", "D", "E" // ... 更多键名 ];
期望转换后的结果:
{ "dummyValues": [ { "A": 0.57, "B": 0.52, "C": 0.51, "D": 0.50 // ... 更多键值对 }, { "A": 0.56, "B": 0.52, "C": 0.50, "D": 0.49, "E": 0.46 // ... 更多键值对 } ] }
要求仅使用JavaScript实现该转换。
实现方案
方法1:map + Object.fromEntries(简洁写法)
利用Object.fromEntries将键值对数组直接转为对象,语法简洁高效:
// 原始数据 const originalData = { "dummyValues": [ [0.57, 0.52, 0.51, 0.50], [0.56, 0.52, 0.50, 0.49, 0.46] ] }; const keys = ["A", "B", "C", "D", "E"]; // 转换逻辑 const transformedData = { dummyValues: originalData.dummyValues.map(arr => Object.fromEntries(arr.map((value, index) => [keys[index], value])) ) }; console.log(transformedData);
方法2:map + reduce(兼容旧环境)
如果需要兼容不支持Object.fromEntries的旧浏览器/环境,用reduce逐步构建对象:
const transformedData = { dummyValues: originalData.dummyValues.map(arr => arr.reduce((resultObj, value, index) => { resultObj[keys[index]] = value; return resultObj; }, {}) ) };
方法3:map + forEach(直观写法)
用forEach遍历子数组元素,逐个给对象赋值,逻辑直观易懂:
const transformedData = { dummyValues: originalData.dummyValues.map(arr => { const resultObj = {}; arr.forEach((value, index) => { resultObj[keys[index]] = value; }); return resultObj; }) };
注意事项
- 若子数组元素数量多于
keys长度,超出的元素会被忽略; - 若
keys数量多于子数组元素,多余的键不会出现在结果对象中(除非子数组对应位置为undefined)。
内容的提问来源于stack exchange,提问作者JSG
相关产品推荐
相关产品推荐

