如何使用数组元素命名的属性创建对象

时间:2018-03-23 19:31:49

标签: javascript arrays object ecmascript-6

虽然

let Adam = {}; 
{Adam}
// { Adam: {} }

对象数组没有发生同样的情况:

let Adam = {}; 
let Eva = {}; 
[Adam, Eva].map(man => ({man}))
// [ { man: {} }, { man: {} } ]

我想[{ Adam: {}, Eva: {} }]。为什么不是这样?

5 个答案:

答案 0 :(得分:1)

我不知道这个的目的,但你可以这样做:



let Adam = {}; 
let Eva = {}; 
console.log([{Adam, Eva}])




另一种选择是使用函数reduce



let Adam = {};
let Eva = {};

var result = [[{Adam}, {Eva}].reduce((a, c) => {
  Object.keys(c).forEach(k => (a[k] = c[k]));
  return a;
}, {})];

console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:1)

您不希望以编程方式执行的操作因为您依靠变量名来创建属性,而在map函数中,变量名只是{{1} }。

创建这样的数组的唯一方法是手动指定每个元素:

man

您赢得了哪些动态,每个对象都需要const arr = [{Adam}, {Eva}] name属性。

答案 2 :(得分:0)

let Adam = {}; 
let Eva = {};

const arr = [{Adam, Eva}];

答案 3 :(得分:0)

因为实际上,当你使用对象属性简写时,它的字面名称为man,并且会为循环的每次迭代覆盖该对象属性名称。

由于您所要求的是一个内部有一个对象的数组,每个名称都嵌套在该对象内部,因此它看起来像这样:



const peopleObject = ["Adam", "Eva"].reduce((accumulatorObject, person) => {
  accumulatorObject[person] = {};
  return accumulatorObject;
}, {});

console.log(peopleObject);
// { Adam: {}, Eva: {} }

const peopleObjectInArray = [peopleObject];
console.log(peopleObjectInArray);
// [ { Adam: {}, Eva: {} } ]




答案 4 :(得分:0)



let Adam = {}; 
let Eva = {}; 

let arr = [{}];

arr[0]["Adam"] = Adam;
arr[0]["Eva"] = Eva;

console.log(arr);