Javascript 以对象的属性为键变换对象列表中的对象数组

Javascript 以对象的属性为键变换对象列表中的对象数组,javascript,arrays,object,ecmascript-6,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":10

我有一个对象数组,我想在对象中对其进行变换,其中对象键是对象的属性之一,如:

原始阵列的示例:

const myArray = [
  {"groupName":"groupname","description":"nice description here","name":"name1","value":107},
  {"groupName":"groupname","description":"nice description here","name":"name1","value":107}
]
使用es6 nice的新功能,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进行迭代的情况下执行相同的操作


想法

要将数组转换为具有特定值作为键的对象,需要迭代数组,并构建对象的属性


用于“手动”向对象添加属性:

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),{});

控制台日志(结果)那么,当简单的操作可以工作时,为什么需要使用map/reduce/forEach形式的es6和循环呢

let myArray = [
  {"groupName":"groupname","description":"nice description here","name":"name1","value":107},
  {"groupName":"groupname","description":"nice description here","name":"name2","value":108}
]
let newObject ={};
newObject[myArray[0].name] = myArray[0];
newObject[myArray[1].name] = myArray[1];
console.log(newObject);

你确定没有重复的名字吗?如果是这样的话,一些物体就会丢失。@ibrahimmahrir我理解,但在真实情况下,没有重复的名字。不管怎样,我还是要警告你!如果数组中有无数个技巧(10^100000)条目的话会怎么样?记下点。我假设OP在指定不使用时不想循环forloop@ibrahimmahrir我们需要更多RAM@apokryfos这是不可避免的。但有了这个解决方案,您还需要更多的精力和更多的硬盘存储空间来输入和存储这些代码行。