在JavaScript的Array.prototype.map
或Array.prototype.forEach
中是否可以向后迭代一次?也就是说,如果当前的迭代索引为2,我们可以返回索引1吗?请记住,我们可以通过减少for-loop
来使用正常的i
实现这一目标,有没有办法使用map
做到这一点?
答案 0 :(得分:2)
您可以使用提供给回调的第三个参数来访问 .map
中的上一个元素:
const input = [1, 2, 3];
const output = input.map((num, i, arr) => {
console.log('last num was ' + arr[i - 1] + ', current num is ' + num);
return num + 1;
});
但是,由于先前迭代的.map
回调已经运行并返回了值,因此无法分配到新映射数组中的先前元素。
一个可能完成您要查找的方法的方法是,从当前元素 forwards 中查找并返回新的方法,而不是从下一个元素向后查找基于此的映射值:
const input = [1, 2, 3];
const output = input.map((num, i, arr) => {
console.log('next num is ' + arr[i + 1] + ', current num is ' + num);
return num + (arr[i + 1] || 0);
});
console.log(output);