首页 > 解决方案 > 对象引用给出未定义

问题描述

请耐心等待我的愚蠢问题,我是 javscript 的新手。我正在尝试过滤地图,但无法将创建的对象分配给引用变量。

let serviceFeeMap = new Map();
  paymentAmountServiceFeeInfo.map(serviceFees => {
    if (serviceFees.serviceFees.serviceFeeApplicableMethods.length > 0) {
      serviceFees.serviceFees.serviceFeeApplicableMethods.map(applicableMethod => {
        let serviceFeeList = serviceFeeMap.get(applicableMethod);
        if (!serviceFeeList) {
          serviceFeeMap.set(applicableMethod, new Array(serviceFees.serviceFees));
        } else {
          serviceFeeList.push(serviceFees.serviceFees);
          serviceFeeMap.set(applicableMethod, serviceFeeList);
        }
      });
    }
  });



const finalResult = serviceFeeMap.forEach((v, k) => {
    let values = v;
    let count = 0;
    const arrayValues = values.map((value) => {
      if (count === 0) {
        count++;
         return {
           applicableMethod : k,
           serviceFeeAdjustmentType : value.serviceFeeAdjustmentType,
           serviceFeeAmount : value.serviceFeeAmount
         };
      } else {
        count++;
        return {
          applicableMethod : '',
          serviceFeeAdjustmentType : value.serviceFeeAdjustmentType,
          serviceFeeAmount : value.serviceFeeAmount
        };
      }

    })
    return arrayValues;
  });

我得到 finalResult 为 undefined 。

标签: javascriptreactjs

解决方案


您试图从forEach()回调中返回一个值,但它不能返回任何值。forEach() 方法按插入顺序对 Map 对象中的每个键/值对执行一次提供的函数。

根据 MDN文档

forEach 方法为实际存在的映射的每个键执行一次提供的回调。它不会为已删除的键调用。但是,它针对存在但具有未定义值的值执行。

这就是你得到的undefined原因finalResult。在这种情况下,您可以编写一个全局var变量来保存Map.prototype.forEach()

let finalResult = [];
serviceFeeMap.forEach((v, k) => {
    let values = v;
    let count = 0;
    const arrayValues = values.map((value) => {
        if (count === 0) {
            count++;
            return {
                applicableMethod : k,
                serviceFeeAdjustmentType : value.serviceFeeAdjustmentType,
                serviceFeeAmount : value.serviceFeeAmount
            };
        } else {
            count++;
            return {
                applicableMethod : '',
                serviceFeeAdjustmentType : value.serviceFeeAdjustmentType,
                serviceFeeAmount : value.serviceFeeAmount
            };
        }

    })
    finalResult.push(arrayValues);
})

推荐阅读