有没有办法在 TypeScript 中动态应用数组映射器?

Posted

技术标签:

【中文标题】有没有办法在 TypeScript 中动态应用数组映射器?【英文标题】:is there a way to dynamically apply array mappers in TypeScript? 【发布时间】:2021-10-10 15:20:20 【问题描述】:

我需要帮助。我正在尝试从数组中获取数据,但每次我添加一个新的组过滤器(我正在使用自定义 Kendo 网格)时,我收到的是一个嵌套数组,如果我想获取这些数据,我需要添加一个新的“项目”数组上的映射方法。问题是我没有只有一个组过滤器,但我有太多了。我能做什么?

所以每次我都必须在 items 数组上添加另一个 map 方法,这不是很舒服。我的问题有解决方案吗?我可以很容易地得到组过滤器的编号。

【问题讨论】:

this.GridDataResult.data.forEach((x)=> this.selectedKeys += x.items.map((y)=> y.selectionKey) ) 您可以使用 flatMap 转换例如[ [1, 2], [3, 4] ] 到 [1, 2, 0, 3, 4, 0] 对于 arr.flatMap(v => [...v, 0])。在您的情况下,这应该具有相同的结果: const temp = this.GridDataResult.data .flatMap(x => x.items) .map(y => y.selectionKey) 【参考方案1】:

您可以使用flatMap 转换,例如[ [1, 2], [3, 4] ][1, 2, 0, 3, 4, 0]arr.flatMap(v => [...v, 0])。在您的情况下,这应该具有相同的结果:

const temp = this.result.data
    .flatMap(x => x.array)
    .map(y => y.selections)

这使您的代码更具可读性,更易于维护和添加。

如果你真的想动态添加地图功能,你可以这样做:

const maps = [
    x => x.array,
    v => [v, v * 11],
    v => [v, -v],
    v => `num: $v`,
];

const data = [
     array: [1, 2] ,
     array: [3] ,
];

const temp = maps.reduce((data, map) => data.flat().map(map), data);
console.log(temp);

【讨论】:

【参考方案2】:

您可以通过这样替换第一个地图来删除 forEach:

this.result.data.forEach((x)=>
  this.selections += x.array.map((y)=> y.selections)
)

举个例子说明 this.result 和 this.selections 可能包含的内容会有所帮助

【讨论】:

以上是关于有没有办法在 TypeScript 中动态应用数组映射器?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript数组到字符串文字类型

在 Angular 2/4 中使用 typescript 动态创建 HTML 元素数组

有没有办法在 dart 中使用 JsonSerializable 创建 JsonKey 动态,我们可以从 JsonSerializable 类中创建和获取数组吗?

如何使用 Typescript 定义具有动态键的数组?

有没有办法根据小数位在python中对数组/列表的值进行动态分组?

TypeScript 是不是可以从动态对象中推断出键?