Javascript 如何迭代数组中的每个数字,并将它们与同一数组中的其他数字相加-JS

Javascript 如何迭代数组中的每个数字,并将它们与同一数组中的其他数字相加-JS,javascript,arrays,loops,nested,Javascript,Arrays,Loops,Nested,我尝试将数组中的每个数字与下一个数字相加,并保存所有结果: 这是我的例子: var arr = [2, 3, -6, 2, -1, 6, 4]; 我必须求和2+3并保存它,然后2+3-6保存它,接下来2+3-6-1保存它等等。。到数组的末尾。下一步与第二个索引3-6相同并保存它,3-6+2。。。 我知道这可以通过两个嵌套循环来实现,但不知道如何实现。 我错在哪里 const sequence=[2,3,-6,2,-1,2,-1,6,4] 常数和=[]; for(设i=0;i[…a,a[a.l

我尝试将数组中的每个数字与下一个数字相加,并保存所有结果: 这是我的例子:

var arr = [2, 3, -6, 2, -1, 6, 4];
我必须求和2+3并保存它,然后2+3-6保存它,接下来2+3-6-1保存它等等。。到数组的末尾。下一步与第二个索引3-6相同并保存它,3-6+2。。。 我知道这可以通过两个嵌套循环来实现,但不知道如何实现。 我错在哪里

const sequence=[2,3,-6,2,-1,2,-1,6,4]
常数和=[];
for(设i=0;i控制台日志(总和)下面使用一个函数将一个数组转换为其渐进和的数组

您可以在从数组中移除项的同时重复调用该函数,以对整个事件求和

以下是一个简明的版本:

var-arr=[2,3,-6,2,-1,6,4];
var listSums=(数组)=>array.reduce((a,b)=>[…a,a[a.length-1]+b],[0]).slice(2);
var listAllSums=(array)=>array.reduce((a,b,index)=>[…a,…listSums(array.slice(index))],[]);

console.log(listAllSums(arr))您缺少一个循环。这是经过一些修改的代码

const sequence = [2, 3, -6, 2, -1, 2, -1, 6, 4]
const sums = [];

for (let startIndex = 0; startIndex < sequence.length; startIndex++) {
    console.log('starting from index', startIndex, `i.e. number is (${sequence[startIndex]})`);
    for (let subSequenceLen = 1; subSequenceLen < sequence.length - startIndex; subSequenceLen++) {
        console.log('subsequence length is ', subSequenceLen);
        let sum = 0;
        for (let z = startIndex; z <= startIndex + subSequenceLen; z++) {
            sum += sequence[z];
        }
        console.log('sum is ', sum);
        sums.push(sum);
    }
}

console.log(sums);
最后的和数组是:

[5,-1,1,0,2,1,7,11,-3,-1,-2,0,-1,5,9,-4,-5,-3,-4,2,6,1,3,2,8,12,1,0,6,10,1,7,11,5,9,10]

您不需要嵌套循环,您需要具有以下逻辑的单个循环

  • 添加1+2,将其存储在x中
  • 添加x+3(表示1+2+3),将其存储在y中
  • 添加y+4(表示1+2+3+4),将其存储在z中
  • 。。。等等
使用单循环,而不是将它们存储在x,y,z中。。我们将其存储在
sums
数组中

arr.forEach((number, index) =>
    sums.push(number + (sums[index-1] || 0))
)
这里
求和[index-1]
表示算法的x/y/z。我们做
求和[index-1]| | 0
,因为当索引为零时,它将查找未定义的
和[-1]
,因此我们将其替换为
0

这是现场代码

让arr=[2,3,-6,2,-1,6,4],sums=[]
arr.forEach((编号、索引)=>
sums.push(数字+(sums[index-1]| | 0))
)

console.log(sums.slice(1))
您可以使用两个循环,并始终将相同数字的最后一个和添加到当前数字:

const sequence=[2,3,-6,2,-1,2,-1,6,4]
常数和=[];
for(设i=0;i控制台日志(总和)您可以通过迭代数组来映射值,并将数组的子集用于另一个映射。将外部数组的值作为累加器,用于添加内部值并返回此值

var数组=[2,3,-6,2,-1,6,4],
result=[].concat(…array.map((s,i,a)=>a.slice(i+1).map(v=>s+=v));
控制台日志(结果)
。作为控制台包装{最大高度:100%!重要;顶部:0;}
arr.forEach((number, index) =>
    sums.push(number + (sums[index-1] || 0))
)