为什么map方法不返回对象数组?

时间:2019-10-05 09:12:40

标签: javascript array.prototype.map

let x = {a:1,b:2,c:3}
let result = Object.keys(x).map((i) => {
  console.log(i) ;
  return ({i :x[i]});
})

为什么会得到

[{i: 1},{i: 2},{i: 3}]

?在控制台中,正在打印值i,即a,b,c。返回期间会发生什么?

1 个答案:

答案 0 :(得分:3)

  

为什么map方法不返回对象数组?

可以。

  

退货期间会发生什么?

return ({i :x[i]});行的意思是:

  • 创建一个对象。
  • 为它提供一个名为"i"的属性(不是i value ,而是实际的文字名称"i"),其值来自x[i]
  • 将其作为此地图迭代的值返回,将在结果数组中使用。

结果是一个对象数组,每个对象都有一个称为"i"的属性。

如果您打算使用i value ,则需要使用计算出的属性名称。也没有理由在对象文字周围使用()

return {[i]: x[i]};
//      ^^^------------- computed property name

实时示例:

let x = {a:1,b:2,c:3};
let result = Object.keys(x).map((i) => {
  console.log(i) ;
  return {[i]: x[i]};
});
console.log(result);
.as-console-wrapper {
    max-height: 100% !important;
}

这是在ES2015中引入的。在ES5及更早版本中,您必须先创建对象,然后再向其添加属性。