在javascript reactjs中映射对象数组时出错

时间:2017-11-10 00:08:56

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

我有一个对象

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计算一个值,示例值= k * qtty。

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

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

我进入了accesorieslosses [undefined,undefined,undefined] 谢谢你的帮助

2 个答案:

答案 0 :(得分: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}
]

答案 1 :(得分:1)

解释你未定义的原因

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)

可以进一步简化

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);