如何使用forEach列出部分和的清单

Tea*_*afe 24 javascript arrays foreach ecmascript-6

我有一个看起来像这样的数组数组:

changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];
Run Code Online (Sandbox Code Playgroud)

我想通过添加最后一个值来获取数组中的下一个值

values = [ [1, 2, 3, 2], [1, 0, -1], [1, 2] ];
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试使用forEach:

changes.forEach(change => {
    let i = changes.indexOf(change);
    let newValue = change[i] + change[i + 1]
});
Run Code Online (Sandbox Code Playgroud)

我认为我做对了,但我无法采用这种方法进行工作,或者也许有更好的方法可以做到这一点。

Nin*_*olz 27

您可以保存总和并添加值。

var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]],
    result = array.map(a => a.map((s => v => s += v)(0)));

console.log(result);
Run Code Online (Sandbox Code Playgroud)

通过使用forEach,您需要获取对象引用和上一个值或零。

var array = [[1, 1, 1, -1], [1, -1, -1], [1, 1]];

array.forEach(a => a.forEach((v, i, a) => a[i] = (a[i - 1] || 0) + v));

console.log(array);
Run Code Online (Sandbox Code Playgroud)

  • 真的,对于外部数组中的三个项目?如果您真的想加快执行速度,则不要使用某些数组方法,而应使用嵌套的“ for”循环并创建新的数组。 (2认同)

Tho*_*mas 13

map的版本。

const changes = [
  [1, 1, 1, -1],
  [1, -1, -1],
  [1, 1]
];

const values = changes.map(array => {
  let acc = 0;
  return array.map(v => acc += v);
});

console.log(values);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper{top:0;max-height:100%!important}
Run Code Online (Sandbox Code Playgroud)

并且这不会改变源数组。


Ale*_*lex 3

您可以使用Array的map函数

const changes = [ [1, 1, 1, -1], [1, -1, -1], [1, 1] ];    
const result = changes.map((v) => v.slice(0).map((t, i, arr) => i === 0 ? t : (arr[i] += arr[i - 1])))
console.log(changes);
console.log(result);
Run Code Online (Sandbox Code Playgroud)

更新

使用切片来克隆数组。这将防止更改原始数组。

  • 这**修改**源数组,这可能不是一个好主意。 (3认同)