相关疑难解决方法(0)

JavaScript - 从具有m个元素的n个数组生成组合

我在编写代码时难以在JavaScript中生成包含m个元素的n个数组的组合.我已经在其他语言中看到了类似的问题,但答案包含语法或库魔法,我不确定如何翻译.

考虑这些数据:

[[0,1], [0,1,2,3], [0,1,2]]
Run Code Online (Sandbox Code Playgroud)

3个数组,其中包含不同数量的元素.我想要做的是通过组合每个数组中的项来获得所有组合.

例如:

0,0,0 // item 0 from array 0, item 0 from array 1, item 0 from array 2
0,0,1
0,0,2
0,1,0
0,1,1
0,1,2
0,2,0
0,2,1
0,2,2
Run Code Online (Sandbox Code Playgroud)

等等.

如果数组的数量是固定的,那么很容易进行硬编码实现.但阵列的数量可能会有所不同:

[[0,1], [0,1]]
[[0,1,3,4], [0,1], [0], [0,1]]
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

javascript combinations permutation

44
推荐指数
5
解决办法
3万
查看次数

无法在Ramda.js中绕着"电梯"环绕我的脑袋

查看Ramda.js的来源,特别是"升力"功能.

电梯

liftN

这是给定的例子:

var madd3 = R.lift(R.curry((a, b, c) => a + b + c));

madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)

因此结果的第一数目是容易的,a,b,和c,是每个阵列的所有的第一元素.第二个对我来说并不容易理解.参数是每个数组的第二个值(2,2,未定义)还是第一个数组的第二个值以及第二个和第三个数组的第一个值?

即使无视这里发生的事情的顺序,我也没有真正看到它的价值.如果我在没有lift它的情况下执行它,我将最终将数组concat作为字符串.这似乎有点像,flatMap但我似乎无法遵循其背后的逻辑.

javascript functional-programming lifting ramda.js

22
推荐指数
3
解决办法
3679
查看次数

从数组创建的生成器列表中获取

我有这个递归发生器

var obj = [1,2,3,[4,5,[6,7,8],9],10]

function *flat(x) {
    if (Array.isArray(x))
        for (let y of x)
            yield *flat(y)
    else
        yield 'foo' + x;

}

console.log([...flat(obj)])
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我不喜欢这for部分.有没有办法在功能上写它?我试过了

if (Array.isArray(x))
   yield *x.map(flat)
Run Code Online (Sandbox Code Playgroud)

这没用.

有没有办法在没有for循环的情况下编写上述函数?

javascript yield generator ecmascript-6

13
推荐指数
1
解决办法
1604
查看次数