【问题标题】:Error mapping an array of objects in javascript reactjs在javascript reactjs中映射对象数组时出错
【发布时间】:2017-11-10 00:08:56
【问题描述】:

我有一个对象

const pipe = {
diameter: 200,
C: 120,
length: 40,
accesories: [
    {name: "Bend 90°", k: 0.9, qtty: 2},
    {name: "Gate Valve", k: 0.3, qtty: 1},
    {name: "Butterfly valve", k: 0.2, qtty: 1}
  ]
}

我需要检查所有附件并用 k 计算一个值,例如 value = k * qtty。

当我执行以下操作时,它不起作用

const perdidaslocales = (accesorio) => {accesorio.name, accesorio.k * accesorio.qtty}
const accesorieslosses = pipe.accesories.map(perdidaslocales);

我得到了配件损失 [未定义,未定义,未定义] 感谢您的帮助

【问题讨论】:

  • {accesorio.name, accesorio.k * accesorio.qtty} 完全没有意义...用accesorio.k * accesorio.qtty替换它
  • 我需要在新的对象数组中,取值的名称
  • 如果perdidaslocales需要返回一个OBJECT,将返回值包裹在() ....并使其成为有效对象,即... ({name: accesorio.name, value: accesorio.k * accesorio.qtty})
  • 但是由于您已经在使用一些 ES2015+ 概念,const perdidaslocales = ({name, k, qtty}) => ({name, value: k * qtty});
  • 将尝试第二个选项,因为第一个我得到了意外的令牌,预期的错误

标签: javascript object dictionary ecmascript-6 arrow-functions


【解决方案1】:

替换

const perdidaslocales = (accesorio) => {accesorio.name, accesorio.k * accesorio.qtty}

const perdidaslocales = (accesorio) => {
   return { 
       name: accesorio.name,
       value: accesorio.k * accesorio.qtty
   }
}

最终结果应该是这样的:

[
  {name: "Bend 90°", value: 1.8},
  {name: "Gate Valve", value: 0.3},
  {name: "Butterfly valve", value: 0.2}
]

【讨论】:

  • 完美。它适用于此 const perdidaslocales = (accesorio) => { return { name: accesorio.name, value: accesorio.k * accesorio.qtty } }
  • 谢谢@ante-jablan-adamovi%c4%87。有用。谢谢@jaromanda-x 也会尝试你的解决方案。
【解决方案2】:

解释为什么你得到未定义

const perdidaslocales = (accesorio) => {accesorio.name, accesorio.k * accesorio.qtty}

等价于

const perdidaslocales = (accesorio) => {
    accesorio.name; 
    accesorio.k * accesorio.qtty;
}

看看怎么没有回报?因此返回值为undefined ...

看来,你要做的是返回一个对象,如果你想返回一个对象,你需要在一个简单的(一行,“隐含”返回)箭头函数中将返回值包装在()或者一个数组

第二个问题是,

{accesorio.name, accesorio.k * accesorio.qtty}

不是有效对象。对象是键/值对,如

{key1: value1, key2: value2}

因此,在您的情况下,您可以返回名称和值,例如

{name: accesorio.name, value: accesorio.k * accesorio.qtty}

把这些放在一起,你会得到

const pipe = {
    diameter: 200,
    C: 120,
    length: 40,
    accesories: [
        {name: "Bend 90°", k: 0.9, qtty: 2},
        {name: "Gate Valve", k: 0.3, qtty: 1},
        {name: "Butterfly valve", k: 0.2, qtty: 1}
    ]
}
const perdidaslocales = (accesorio) => ({name: accesorio.name, value: accesorio.k * accesorio.qtty});
const accesorieslosses = pipe.accesories.map(perdidaslocales);

console.log(accesorieslosses);

这可以使用对象解构来简化See this MDN documentation

const pipe = {
    diameter: 200,
    C: 120,
    length: 40,
    accesories: [
        {name: "Bend 90°", k: 0.9, qtty: 2},
        {name: "Gate Valve", k: 0.3, qtty: 1},
        {name: "Butterfly valve", k: 0.2, qtty: 1}
    ]
}
const perdidaslocales = ({name, k, qtty}) => ({name: name, value: k * qtty});
// object destructuring  ^^^^^^^^^^^^^^^
const accesorieslosses = pipe.accesories.map(perdidaslocales);

console.log(accesorieslosses);

这可以进一步简化,使用Shorthand Object property names (search for shorthand in this link) to

const pipe = {
    diameter: 200,
    C: 120,
    length: 40,
    accesories: [
        {name: "Bend 90°", k: 0.9, qtty: 2},
        {name: "Gate Valve", k: 0.3, qtty: 1},
        {name: "Butterfly valve", k: 0.2, qtty: 1}
    ]
}
const perdidaslocales = ({name, k, qtty}) => ({name, value: k * qtty});
// Object shorthand property names             ^^^^^
const accesorieslosses = pipe.accesories.map(perdidaslocales);

console.log(accesorieslosses);

【讨论】:

  • @AlejandroA.E.Díaz 我发现解释错误通常比提供解决方案更好:p
猜你喜欢
  • 2020-03-10
  • 1970-01-01
  • 2021-10-12
  • 2020-10-14
  • 2021-01-30
  • 1970-01-01
  • 2017-05-14
  • 2020-10-24
  • 1970-01-01
相关资源
最近更新 更多