gpt4 book ai didi

javascript - 使用对象的属性作为键转换对象列表中的对象数组

转载 作者:行者123 更新时间:2023-11-30 11:27:27 27 4
gpt4 key购买 nike

我有一个对象数组,我想将它转换为一个对象,其中对象键是对象的属性之一,例如:

原始数组示例:

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com