为什么 map 或 reduce 在没有给出任何条件的情况下保持 运行?

Why map or reduce keeps running without any condition given?

const array = [7, 2, 4, 1, 10, 6, 5, 11]

const max = array.reduce((acc, val) => {
    console.log(val, acc)
    
    return val > acc ? val : acc
}, 0)

console.log(max)

我在看这段reduce array method的代码,有一点完全看不懂,reducer函数是如何进行下一次迭代的?没有条件强制 reducer 函数转到数组中的下一个元素。在第一次迭代中,val 为 7,数组的第一个元素,acc 为 0,reducer 函数 returns 7 根据写入的条件。 我的问题是如何在 reducer 函数上调用作为新累加器的数字 7。我认为正常的程序是你必须满足某种条件才能一遍又一遍地迭代。 reduce 方法本身有写什么吗?你能解释一下吗?

根据此处的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

reduce() 方法对数组的 每个 元素执行 user-supplied “reducer” 回调函数,

请注意 array.reduce:

reduce calls the callback, as a function, once for each element after the first element present in the array, in ascending order.

您可以将 reduce 理解为 array.map,但它的目标是将数组更改为单个输出。

它将遍历整个 arrayforEach/map/...

相同

检查下面的例子,即使你没有做任何事情,比如 return array.reduce 的任何其他事情,它仍然会工作并迭代 array

您可以在此处查看 more

当然如果你不为array.reduce使用return,你使用array.reduce就没有任何好处

const array = [7, 2, 4, 1, 10, 6, 5, 11]

const max = array.reduce((acc, val) => {
  console.log(val)
}, 0)

console.log(max)

reduce 方法的实现类似于这样:

Array.prototype.reduce = function(callback, initialValue) {
    var acc = initialValue;
    for(var i = 0; i < this.length; i++) {
        acc = callback(acc, this[i], i);
    }
    return acc;
}

reduce方法迭代条件是数组长度。 map.

也是如此