阵列中的子阵列

Subarrays in an array

本文关键字:阵列      更新时间:2024-04-29

我对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;
}

现在,如果例如为数组[1,2,3]调用此函数,则结果为[[], [], [], [1], [2], [3], [2, 3], [1, 2], [1, 2, 3]]。我不明白为什么有三个空数组,但这与我试图实现的目标很接近。此外,我想得到每个子数组中值的总和。我知道上面的代码很粗糙。希望有人能帮我改进。提前谢谢!

嵌套for的条件不正确。将其从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,3],[1,2],[1],[2,3],[2],[3]]

需要注意的是:考虑到Array.slice(initialOffset, finalOffset),在finalOffset > initialOffset时只返回一个非空数组是有意义的。