Javascript 将对象数组转换为对象对象对象,以便新对象由其属性之一引用

Javascript 将对象数组转换为对象对象对象,以便新对象由其属性之一引用,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,我基本上是在寻找一种用javascript实现这一点的快速方法: let arr = [{key: "alpha", value: "2", property1: "some"},{key:"beta", value:"3", property1: "extra", property2: "property"},{key: "gamma", value: "4"}]; let obj = someFunction(arr); // WANTED RESULT: //obj is now { "a

我基本上是在寻找一种用javascript实现这一点的快速方法:

let arr = [{key: "alpha", value: "2", property1: "some"},{key:"beta", value:"3", property1: "extra", property2: "property"},{key: "gamma", value: "4"}];
let obj = someFunction(arr);
// WANTED RESULT:
//obj is now { "alpha" : { value: "2", property1: "some" }, "beta" : {value: "3", property1: "extra", property2: "property",} , "gamma": {value: "4"} }
数组中的每个对象都可以有更多的属性,除了键之外,还有不同的属性

编辑:这就是我所做的。它仍然在对象上留下一个属性,我不确定这/循环是否是最有效的方法

tempObj = {};
for (let i = 0; i < arr.length; i++) {
    tempObj[arr[i].key] = arr[i];
}
//this will give this answer, close enough to what I want: 
//{ alpha: {key: "alpha", value: "2", property1: "some"}, beta: key:"beta", value:"3", property1: "extra", property2: "property", gamma: {key: "gamma", value: "4"} }
tempObj={};
for(设i=0;i
您可以通过这种方式完成此操作

让arr=[{key:“alpha”,value:“2”,property1:“some”},{key:“beta”,value:“3”,property1:“extra”,property2:“property”},{key:“gamma”,value:“4”};
让结果={};
for(arr的let元素){
结果[element.key]=元素;
}
控制台日志(结果)您可以在迭代时使用新对象分配新属性

var数组=[{key:“alpha”,value:“2”,property1:“some”},{key:“beta”,value:“3”,property1:“extra”,property2:“property”},{key:“gamma”,value:“4”},
object=array.reduce((r,o)=>
赋值(r{
[o.key]:对象。键(o)
.reduce((s,k)=>Object.assign(s,k!='key'?{[k]:o[k]}:{}),{})
}),
{});
console.log(对象)
.as控制台包装{max height:100%!important;top:0;}
这样就可以了

让arr=[{key:“alpha”,value:“2”},{key:“beta”,value:“3”},{key:“gamma”,value:“4”}];
var obj={};
arr.forEach(item=>obj[item.key]=item);

控制台日志(obj)
如果要同时删除
属性,可以使用:

const数组=[{key:“alpha”,value:“2”},{key:“beta”,value:“3”},{key:“gamma”,value:“4”,附加:“sample”}];
常量obj={};
forEach(item=>{obj[item.key]=item;删除item['key'];});
控制台日志(obj);

console.log(数组)谢谢大家。看起来它将涉及某种循环和删除操作,由于性能问题,我将避免使用这种操作:

tempObj={};
for(设i=0;i
请显示您尝试过的内容请同时添加想要的结果。{“alpha”:{value:“2”,property1:“some”},“beta”:{value:“3”,property1:“extra”,property2:“property”,},“gamma”:{value:“4”}在这样的用例中,
forEach
map
更适合。对不起,我刚刚更新了我的问题。数组中的每个对象都很复杂,我们只能保证1个属性“key”对所有对象都是相同的。@Stephan您能解释一下为什么forEach在这里更好吗?map返回一个新数组,在这里被丢弃。他使用
map
函数只是为了迭代数组<因此,code>forEach
在语义更清晰的同时具有相同的效果。此外,它还有一个(几乎可以忽略不计的)性能优势,因为它不会将新创建的对象推送到一个新的、未使用的数组中。数组中的每个对象都很复杂,我们只能保证1个属性“key”对所有对象都是相同的。对不起,我刚刚更新了我的问题。数组中的每个对象都是复杂的,我们只能保证1个属性“key”对所有对象都是相同的。我刚刚用一个稍微不同的数组更新了您的代码-我可以处理结果(我自己的代码给我相同的输出),但不能将其减少到我想要的程度
tempObj = {};
for (let i = 0; i < arr.length; i++) {
    tempObj[arr[i].key] = arr[i];
}
//this will give this answer, close enough to what I want: 
//{ alpha: {key: "alpha", value: "2", property1: "some"}, beta: key:"beta", value:"3", property1: "extra", property2: "property", gamma: {key: "gamma", value: "4"} }