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

标签 javascript arrays object ecmascript-6

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

原始数组示例:

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/

相关文章:

javascript - 如何从数组创建 jQuery 对象?

javascript - Chrome 中的 Canvas 错误

javascript - 如何在 Protractor 中编写 beforeSomeTests?

javascript - 如何通过共享工厂切换状态实例来使用两个不同的 Controller 来切换 ng-hide 和 ng-show

javascript - 根据选定的嵌套复选框生成 JSON

Java - 具有多级类的列表集合 - 仅循环最后一个成员 - .stream() .forEach() .for()

javascript - 移相器 3 : Shader with microphone input (Web)

ruby - 使用 Ruby 进行数组包含检查

c - 为什么 printf ("%s",(char[]) {'H' ,'i' ,'\0' }) 像 printf ("%s","Hi") 一样工作,但是 5 printfx,0x104 09104091004070709104091004070910409104091040910409104失败?

ios - 如何存储坐标 - iOS