Javascript 元素小于或等于给定数组中元素的数组

Javascript 元素小于或等于给定数组中元素的数组,javascript,arrays,Javascript,Arrays,解决以下问题最具JS风格的方法是什么 给定一个数组A,查找所有数组B,以便对于i使用以下代码(数组A的一项的任何循环A): 我找到了这个解决办法。我相信它可以用更好的方式编码。然而,它是有效的,我希望你觉得它有用 all_combinations(A){ var B = []; for (var i = 0; i < A[0] + 1; i++) { B.push([i]); } for (var i = 1; i < A.leng

解决以下问题最具JS风格的方法是什么

给定一个数组A,查找所有数组B,以便对于i使用以下代码(数组A的一项的任何循环
A
):


我找到了这个解决办法。我相信它可以用更好的方式编码。然而,它是有效的,我希望你觉得它有用

all_combinations(A){
    var B = [];

    for (var i = 0; i < A[0] + 1; i++) {
        B.push([i]);
    }

    for (var i = 1; i < A.length; i++) {
        var _tmp_array = [];
        for (var j = 0; j < A[i] + 1; j++) {
            for (var k = 0; k < B.length; k++) {
                var _new_element = B[k].concat([j]);
                _tmp_array.push(_new_element);
            }
        }
        B = _tmp_array;
    }

    return B;
}
所有_组合(A){
var B=[];
对于(变量i=0;i
嘿!谢谢你的回答。虽然我不太了解这种方法的构造原理。为什么我们要在那里同时通过A和B,而不是让B返回?什么是recursionLevel?为什么用户应该输入参数?为什么默认情况下第四个参数不能是[]?谢谢@Krishal您不应该将数组
a
b
作为参数传递,但这样做会使函数可重用。
recursionLevel
参数表示此函数调用自身的次数(例如,第一次迭代为0,下一次迭代为1,依此类推。注意,此函数递归调用的所有迭代次数(用于循环的
)使用相同的
recursionLevel
。但此
recursionLevel
在一个函数中的值将大于被调用函数的值)。在下一条注释中继续从上一条注释中继续在第一次调用中传递的空数组是函数使用的临时数组。您可以创建一个helper函数,如
函数fillarrheloper(source,dest){fillArray(source,dest,0,[]);},
并像
fillarrheloper(a,b)一样使用它
B = [[]]; 
for t in [range(e+1) for e in A]:
    B = [x+[y] for x in B for y in t]
var a = [1, 2, 0], b = [];

for (var i = 0; i < a[0]; i++) {
  for (var j = 0; j < a[1]; j++) {
    for (var k = 0; k <= a[2]; k++) {
      b.push([i, j, k]);
    }
  }
}
function fillArray(source, dest, recursionLevel, tempArr) {
  if (recursionLevel >= source.length) {
    dest.push(tempArr);
    return;
  }

  for (var i = 0; i <= source[recursionLevel]; i++) {
    var tempArr2 = tempArr.slice(); // Copy tempArr
    tempArr2.push(i);
    fillArray(source, dest, recursionLevel + 1, tempArr2);
  }
}

fillArray(a, b, 0, []);
all_combinations(A){
    var B = [];

    for (var i = 0; i < A[0] + 1; i++) {
        B.push([i]);
    }

    for (var i = 1; i < A.length; i++) {
        var _tmp_array = [];
        for (var j = 0; j < A[i] + 1; j++) {
            for (var k = 0; k < B.length; k++) {
                var _new_element = B[k].concat([j]);
                _tmp_array.push(_new_element);
            }
        }
        B = _tmp_array;
    }

    return B;
}