是否有像 foreach 这样的函数的函数形式在数组上产生 Javascript 中的所有对
Is there a functional form of a function like foreach over an array that yields all pairs in Javascript
抱歉,标题太绕了,但我希望下面的描述能让你更清楚。
我目前正在 Javascript 中学习函数式编程的乐趣,使用 Ramda 作为我选择的函数式库。我有一个数组,我想以类似于 foreach 的方式对其进行迭代。但是,我希望我的匿名函数从原始数组中传递所有可能的对。所以实际上,形成了一个矩阵,其中矩阵的每个轴由数组的内容表示:
如果我有一个包含 ["a"、"b"、"c"] 的数组,那么总共有 9 对组合;如果我去掉每个与自身配对的元素(我猜这可以通过过滤器实现),那么只有 6 个。但是如果再次减少这个,通过不为反向对回调,只有 3 个。
所以我的函数将传回以下对:
"a", "b"
"a", "c"
"b", "c"
在 Ramda 或任何其他函数库中是否有这样的函数形式?它是通用功能,但我不知道此功能的 'name' 是什么;也许是为每个产量唯一对。在我自己实现之前,我想知道一种惯用的方法,谢谢。
感谢 Yury 的正确回答:
arr.reduce((acc, letter, index, all) => acc.concat(all.slice(index + 1).map(x => [letter, x]) ), [])
抱歉,标题太绕了,但我希望下面的描述能让你更清楚。
我目前正在 Javascript 中学习函数式编程的乐趣,使用 Ramda 作为我选择的函数式库。我有一个数组,我想以类似于 foreach 的方式对其进行迭代。但是,我希望我的匿名函数从原始数组中传递所有可能的对。所以实际上,形成了一个矩阵,其中矩阵的每个轴由数组的内容表示:
如果我有一个包含 ["a"、"b"、"c"] 的数组,那么总共有 9 对组合;如果我去掉每个与自身配对的元素(我猜这可以通过过滤器实现),那么只有 6 个。但是如果再次减少这个,通过不为反向对回调,只有 3 个。
所以我的函数将传回以下对:
"a", "b"
"a", "c"
"b", "c"
在 Ramda 或任何其他函数库中是否有这样的函数形式?它是通用功能,但我不知道此功能的 'name' 是什么;也许是为每个产量唯一对。在我自己实现之前,我想知道一种惯用的方法,谢谢。
感谢 Yury 的正确回答:
arr.reduce((acc, letter, index, all) => acc.concat(all.slice(index + 1).map(x => [letter, x]) ), [])