首页 > 解决方案 > 如何在打字稿中将以下方法转换为具有返回类型的“映射”函数?

问题描述

除了传递对象修改之外,我需要将以下打字稿函数替换为map并直接返回数组对象。C[]

function createModelMap(paramA: A, paramB: B,paramD: D, cArray: C[]): void {
  paramA.objects.forEach(
    c => {
      const p = getC(paramB.id, paramD.name);
      if (p) {
        cArray.push(mapC(p.id, p.name));
      }
    }
  );
}

需要像这样改变

function createModelMap(paramA: A, paramB: B ):C[] : undefined {
     paramA.objects.map...   
}

标签: typescript

解决方案


您可以使用Array.prototype.map,但这反过来会导致某些数组元素未定义,因为您只想有条件地返回何时p为真。另一种选择是使用Array.prototype.reduce,您只需直接返回数组:

function createModelMap(paramA: A, paramB: B, paramD: D): C[] {
    return paramA.objects.reduce((acc, cur) => {
        const p = getC(paramB.id, paramD.name);
        if (p) {
            acc.push(mapC(p.id, p.name));
        }

        return acc;
    }, [] as C[]);
}

更新:您似乎没有使用paramA.objects. 如果是这种情况,您可以删除cur参数:

function createModelMap(paramA: A, paramB: B, paramD: D): C[] {
    return paramA.objects.reduce(acc => {
        const p = getC(paramB.id, paramD.name);
        if (p) {
            acc.push(mapC(p.id, p.name));
        }

        return acc;
    }, [] as C[]);
}

推荐阅读