typescript - 如何在打字稿中将以下方法转换为具有返回类型的“映射”函数?
问题描述
除了传递对象修改之外,我需要将以下打字稿函数替换为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...
}
解决方案
您可以使用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[]);
}
推荐阅读
- sql - 获取客户年初至今的支出
- c++ - 二维数组的 scanf 和行读取
- html - 一些 Bootstrap 元素不起作用 - Navbar-collapse 、 p- 、小列图像
- sql - 使用表中对象的计数(*)来限制 SQL 查询的最有效方法?
- javascript - Flexsearch 导出和导入文档索引问题
- python - 如何在不计算整个 DataFrame 的情况下从 Dask DataFrame 中提取前五个值?
- mysql - SQL查询以基于现有列的按功能分组的二进制列
- python - 焦点损失 U-net。TypeError:无法将 cuda:0 设备类型张量转换为 numpy。首先使用 Tensor.cpu() 将张量复制到主机内存
- php - 在 Laravel 关系对象上将字符串转换为整数
- windows - 如何使用新的 HLK 测试签署微型筛选器驱动程序