【问题标题】:Javascript - mapping array of objects undefinedJavascript - 映射未定义的对象数组
【发布时间】:2020-09-14 15:55:21
【问题描述】:

我从包含数组arrCombined 的函数传递一个对象。我有一个名为results 的对象,我想将其映射并删除字符串,以便将这些字符串转换为整数。在为results映射我的对象数组时,我陷入了未定义的问题。

这是我的数组:

[..]
    0: Object { result: "494,927", risk: "LOW", sector: "Online" }
    ​
    1: Object { result: "48,883", risk: "MEDIUM-LOW", sector: "Retail Stores" }
    ​
    2: Object { result: "59,976", risk: "MEDIUM-LOW", sector: "Store Pick up" }
    ​
    3: Object { result: "1,205,915", risk: "MEDIUM", sector: "Drive in" }
    ​
    4: Object { result: "1,434,262", risk: "LOW", sector: "In store" }

我声明了一个变量finalResult 以在我的映射函数中返回目标“结果”,如下所示。

​ let finalResult = arrCombined.arrCombined.result.map(function (e) {
        return Number(e.replace(/(,\s*)+/g, '').trim());
    });

console.log(finalResult) // undefined.

我期望 finalResult 将结果对象作为数字返回,即 494927, 48883, 59976, 1205915, 1434262

【问题讨论】:

  • 改成arrCombined.map(function(e)e.result.replace
  • 但是,该代码应该抛出:Uncaught TypeError: e.replace is not a function

标签: javascript arrays mapping


【解决方案1】:

您需要从每个对象中获取result 属性。

var arrCombined = [
        { result: "494,927", risk: "LOW", sector: "Online" },
        { result: "48,883", risk: "MEDIUM-LOW", sector: "Retail Stores" },
        { result: "59,976", risk: "MEDIUM-LOW", sector: "Store Pick up" },
        { result: "1,205,915", risk: "MEDIUM", sector: "Drive in" },
        { result: "1,434,262", risk: "LOW", sector: "In store" }
    ],
    finalResult = arrCombined.map(({ result }) => Number(result.replace(/(,\s*)+/g, '').trim()));

console.log(finalResult);

【讨论】:

    【解决方案2】:

    发生这种情况是因为您试图从未定义的arrCombined 访问result 属性,因此您的代码无法正常工作。您只需要通过arrCombined 访问map,然后访问数组中每个对象的result 属性,例如:

    const arrCombined = [
      { result: "494,927", risk: "LOW", sector: "Online" },
      { result: "48,883", risk: "MEDIUM-LOW", sector: "Retail Stores" },
      { result: "59,976", risk: "MEDIUM-LOW", sector: "Store Pick up" },
      { result: "1,205,915", risk: "MEDIUM", sector: "Drive in" },
      { result: "1,434,262", risk: "LOW", sector: "In store" }
    ]
    
    let finalResult = arrCombined.map(function (e) {
        return Number(e.result.replace(/(,\s*)+/g, '').trim());
    });
    
    console.log(finalResult)

    【讨论】:

      【解决方案3】:

      应该是这样的。

      let finalResult = arrCombined.arrCombined.map(function (e) {
              return Number(e.result.replace(/(,\s*)+/g, '').trim());
          });
      

      【讨论】:

        【解决方案4】:

        应该可以解决你的问题

        var arrCombined = [
        { result: "494,927", risk: "LOW", sector: "Online" },
        { result: "48,883", risk: "MEDIUM-LOW", sector: "Retail Stores" },
        { result: "59,976", risk: "MEDIUM-LOW", sector: "Store Pick up" },
        { result: "1,205,915", risk: "MEDIUM", sector: "Drive in" },
        { result: "1,434,262", risk: "LOW", sector: "In store" }
        ]
        
        var finalResult = arrCombined.map(item => {
          return Number(item.result.replace(/(,\s*)+/g, '').trim())
        });
        
        console.log(finalResult)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-06-28
          • 1970-01-01
          • 2020-11-09
          • 2019-07-09
          • 2023-03-18
          • 2018-10-02
          • 2018-09-17
          相关资源
          最近更新 更多