如何将对象数组指定字段值作为键映射另一字段值生成新对象
对象数组转键值映射对象实现
输入数据
原始待处理数组(原数据存在语法笔误z",已修正为合法结构):
[ { "id": 0, "name": "Active", "value": "Y" }, { "id": 1, "name": "controls", "value": "N" } ]
目标输出
需要生成的单对象结构:
{ "Active": "Y", "controls": "N" }
实现思路
遍历数组每一项,取每项的name字段值作为对象键,对应的value字段值作为键值,逐步填充到空对象中即可。
常用实现代码
- reduce 写法(最简洁)
适合函数式编程场景,代码最精简:const list = [/* 原始输入数组 */] const res = list.reduce((map, item) => { map[item.name] = item.value return map }, {}) - 普通for循环(兼容性最佳)
不依赖ES5+新增API,可在所有JS运行环境直接使用:const list = [/* 原始输入数组 */] const res = {} for (var i = 0; i < list.length; i++) { res[list[i].name] = list[i].value } - for...of 写法(可读性最好)
现代JS环境推荐写法,逻辑直白易维护:const list = [/* 原始输入数组 */] const res = {} for (const item of list) { res[item.name] = item.value }
注意:如果数组中存在多个项的
name值重复,后遍历到的项会覆盖前面同键的值,这是JS对象键唯一的固有特性。如果需要保留所有重复项的值,可以把对应键的存储结构改为数组。
内容的提问来源于stack exchange,提问作者shashank
相关产品推荐
相关产品推荐

