【问题标题】:ES6 map an array of objects, to return an array of objects with new keys [duplicate]ES6映射对象数组,以返回具有新键的对象数组[重复]
【发布时间】:2017-03-13 21:21:20
【问题描述】:

我有一个对象数组:

[
    {
        id: 1,
        name: 'bill'
    },
    {
        id: 2,
        name: 'ted'
    }
]

寻找简单的单线返回:

[
    {
        value: 1,
        text: 'bill'
    },
    {
        value: 2,
        text: 'ted'
    }
]

所以我可以使用正确的键轻松地将它们泵入反应下拉列表。

我觉得这个简单的解决方案应该可以工作,但是我遇到了无效的语法错误:

this.props.people.map(person => { value: person.id, text: person.name })

【问题讨论】:

  • 你需要person => ({...。换句话说,将对象字面量括在括号中。否则 JS 认为它是一个块的开始。

标签: javascript ecmascript-6


【解决方案1】:

你只需要将对象包裹在()

var arr = [{
  id: 1,
  name: 'bill'
}, {
  id: 2,
  name: 'ted'
}]

var result = arr.map(person => ({ value: person.id, text: person.name }));
console.log(result)

【讨论】:

  • 谢谢!不知道我理解为什么括号是必要的,但它们确实有效。使用 JSX 时,如果我将标记保持在同一行,则不需要括号,所以我想我认为同一行上的对象也是如此。
  • 啊,从帖子来看,这显然是重复的:“否则,花括号将被视为表示函数的主体。”现在这是有道理的。再次感谢。
  • 这也可以,但它本质上只是编写代码的另一种方式,我添加了这个是因为 OP 不理解括号,我在自己解决问题时遇到了这个线程: var result = arr.map((person)=>{ return {value:person.id, text:person.name }; });
  • 如果不想添加括号,则使用“=”代替“:”。 this.props.people.map(person => { value= person.id, text= person.name })
  • @NitinAgarwal:你确定吗?你的建议对我不起作用。这是有道理的,它没有。我收到一条错误消息,提示未声明“值”和“文本”。
猜你喜欢
  • 2020-03-19
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2019-04-28
  • 1970-01-01
相关资源
最近更新 更多