虽然
let Adam = {};
{Adam}
// { Adam: {} }
对象数组没有发生同样的情况:
let Adam = {};
let Eva = {};
[Adam, Eva].map(man => ({man}))
// [ { man: {} }, { man: {} } ]
我想[{ Adam: {}, Eva: {} }]
。为什么不是这样?
答案 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);