javascript - C# Linq SelectMany,TypeScript 等价物

标签 javascript c# linq

我如何编写 SelectMany(C# 中的 Linq 函数)以在 TypeScript 语言中执行相同的操作。

例如,示例代码的输出结果如下:

string[] letter = { "a", "b", "c" };
int[] number = { 1, 2, 3 };
var result = letter.SelectMany(x => number, (x, y) => (x + y));

结果 = a1, a2, a3, b1, b2, b3, c1, c2, c3

如何编写与此代码等效的 typescript 。我尝试了这个,但它不起作用。

const result = letter.reduce((x, y) => [...x, ...y], number);

你能帮帮我吗,谢谢。

最佳答案

C#的SelectMany对应Typescript的flatMap、scala的flatMap和haskell的bind。想法来自类别理论中称为 Monad 的概念。

使用平面 map

const letters: string[] = ['a', 'b', 'c']
const numbers: number[] = [1, 2, 3]
const result = letters.flatMap((letter) => numbers.map((n) => `${letter}${n}`))

console.log(result)
// OUTPUT
// [
//   'a1', 'a2', 'a3',
//   'b1', 'b2', 'b3',
//   'c1', 'c2', 'c3'
// ]

减少

const letters: string[] = ['a', 'b', 'c']
const numbers: number[] = [1, 2, 3]
const result = letters.reduce<string[]>((p, c) => [...p, ...numbers.map((n) => `${c}${n}`)], [])

console.log(result)
// OUTPUT
// [
//   'a1', 'a2', 'a3',
//   'b1', 'b2', 'b3',
//   'c1', 'c2', 'c3'
// ]

关于javascript - C# Linq SelectMany,TypeScript 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63997266/

相关文章:

c# - 将数据从 Angular https 发布到 C# Controller

c# - 列表中的碰撞检测

c# - 使用一个类来更新数据?

c# - 如何使用密码控件禁用 Caps Lock 警告?

c# - 获取 LINQ 的 Any() 方法的 MethodInfo?

c# - join 2个查询结果orderby两个不同的值

c# - 执行此操作的 LINQ 方式是什么

Javascript 使用 RegExp 替换字符串模式?

javascript - 将变量从 Jquery 传递到 Node 以运行 git 命令

javascript - 切换可见性(当另一个 div 元素呈现可见时自动导致隐藏)