Javascript 阵列中的子阵列

Javascript 阵列中的子阵列,javascript,arrays,algorithm,collections,combinations,Javascript,Arrays,Algorithm,Collections,Combinations,我对JavaScript非常熟悉(现在只研究了不到一周),并且在计算从某个数组生成的子数组中的值之和时遇到了问题。我可以使用此功能完成此操作: function getSubs(arr) { var newarr = []; for (var i = 0; i < arr.length; i++){ for (var j = arr.length; j > 0; j--){ newarr.push(arr.slice(i, j)); } }

我对JavaScript非常熟悉(现在只研究了不到一周),并且在计算从某个数组生成的子数组中的值之和时遇到了问题。我可以使用此功能完成此操作:

function getSubs(arr) {
  var newarr = [];
  for (var i = 0; i < arr.length; i++){
    for (var j = arr.length; j > 0; j--){
      newarr.push(arr.slice(i, j));
    }
  }
  return newarr;
}
函数getSubs(arr){ var newarr=[]; 对于(变量i=0;i0;j--){ 新切向推(切向(i,j)); } } 返回newarr; }
现在,如果为数组调用此函数,则结果是
[[]、[]、[]、[]、[1]、[2]、[3]、[2,3]、[1,2]、[1,2,3]
。我不明白为什么会有三个空数组,但这接近于我想要实现的目标。另外,我想得到每个子数组中的值的总和。我知道上面的代码很粗糙。希望有人能帮我改进一下。提前谢谢

嵌套的条件不正确。 将其从
j>0
更改为
j>i
,它将正常工作:

function getSubs(arr){
  var newarr = [];
  for (var i=0;i<arr.length;i++){
    for (var j=arr.length;j>i;j--){
      newarr.push(arr.slice(i,j));
    }
  }
  return newarr;
}
输出:

[[1,2,3],[1,2],[1],[2,3],[2],[3]]


需要注意的是:考虑到
Array.slice(initialOffset,finalOffset)
,当
finalOffset>initialOffset

时,返回一个非空数组是有意义的,因此
[1,2,3]
是您的示例输入。但是你想要的输出是什么呢?现在还不清楚你想在这里做什么。你没有在嵌套数组中循环,切片代码也没有任何意义……空集仍然需要被包括在内,因为它被认为是一个子集@chiliNUT,OP告诉它只是为了去掉空子数组。@chiliNUT只是提一下,如果OP真的想要一个幂集,该代码也无法检索
[1,3]
。非常感谢!)现在开始试验如何得到总和…:)@现在你提到了falsarella,是的,它并没有真正理解这一点。我以为我有所有可能的子阵列。你知道我该如何改进代码来达到这个目的吗?
[[1,2,3],[1,2],[1],[2,3],[2],[3]]