我有一个对象数组,我想将它转换为一个对象,其中对象键是对象的属性之一,例如:
原始数组示例:
const myArray = [
{"groupName":"groupname","description":"nice description here","name":"name1","value":107},
{"groupName":"groupname","description":"nice description here","name":"name1","value":107}
]
使用 es6 不错的新功能,Object.assign 非常接近我需要的,但它为对象分配数字键,如:
let newObject = Object.assign({}, myArray);
这给了我一个非常接近的对象,例如:
{
"0": {"groupName":"groupname","description":"nice description here","name":"name1","value":107},
"1": {"groupName":"groupname","description":"nice description here","name":"name1","value":107}
}
但我真正需要的是将对象的属性之一作为键而不是分配的数字,例如:
{
"name1": {"groupName":"groupname","description":"nice description here","name":"name1","value":107},
"name2": {"groupName":"groupname","description":"nice description here","name":"name2","value":107}
}
我可以迭代并创建对象,但在使用 Object.assign 后,它提供了一个非常接近的解决方案,我想知道 es6 中是否有一种方法可以在不使用 forEach 或 map 进行迭代的情况下执行相同的操作。
想法?
最佳答案
要将数组转换为以特定值作为键的对象,您需要迭代数组,并构建对象的属性。
使用Array#reduce “手动”向对象添加属性:
const myArray = [{"groupName":"groupname","description":"nice description here","name":"name1","value":107}, {"groupName":"groupname","description":"nice description here","name":"name2","value":107}]
const result = myArray.reduce((r, o) => (r[o.name] = o, r), {});
console.log(result);
或者
使用Array#map用一个键将每个对象包装在一个对象中,然后使用 Object#assign 将它们组合成单个对象和 spread :
const myArray = [{"groupName":"groupname","description":"nice description here","name":"name1","value":107}, {"groupName":"groupname","description":"nice description here","name":"name2","value":107}]
const result = Object.assign({}, ...myArray.map((o) => ({ [o.name]: o })));
console.log(result);
关于javascript - 使用对象的属性作为键转换对象列表中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47460698/