function findAllOccurrences(arr, target) {
    let res = [];
    arr.forEach((i, index) => {
        if(i === target) res.push(index);
    });
    return res;
}
function findAllOccurrences(arr, target) {
    return arr.reduce((res, i, index) => {
        if(i === target) res.push(index);
        return res;
    }, []);
}

JavaScript中forEach()是一个数组方法,用于对数组中的每个元素执行一次指定的函数。forEach()方法接受两个参数:一个回调函数和一个可选的上下文对象。回调函数接受三个参数:当前元素、当前索引和整个数组。

下面是一个使用forEach()方法并演示所有参数的例子:

const myArray = ["apple", "banana", "orange"];

myArray.forEach(function(currentValue, index, array) {
  console.log("Current value: " + currentValue);
  console.log("Current index: " + index);
  console.log("Entire array: " + array);
});

在这个例子中,myArray是要被迭代的数组。回调函数中的三个参数分别是currentValue(当前元素的值)、index(当前元素的索引)和array(整个数组)。在回调函数中,我们简单地打印出每个参数的值,以便演示它们的用法。

当这段代码运行时,它将遍历myArray中的每个元素,并将每个元素的值、索引和整个数组打印到控制台上,如下所示:

Current value: apple
Current index: 0
Entire array: apple,banana,orange

Current value: banana
Current index: 1
Entire array: apple,banana,orange

Current value: orange
Current index: 2
Entire array: apple,banana,orange

请注意,在回调函数中,我们可以访问整个数组array。这对于在回调函数内部执行其他数组操作非常有用。同时,我们也可以使用this关键字来引用上下文对象。

reduce()是JavaScript中的一个数组方法,它将数组中的元素依次累加并返回一个单一的值。它接受两个参数,第一个参数是一个函数,用于执行累加操作;第二个参数是可选的初始值,用于设置累加器的初始值。

reduce()方法的语法如下:

array.reduce(callback, initialValue);

下面是关于reduce()方法的两个参数的详细解释和示例:

  1. callback函数 callback函数有四个参数:累加器、当前元素、当前元素的索引和数组本身。这个函数将累加器和当前元素结合起来,返回一个新的值。
const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((accumulator, currentValue, index, array) => {
  return accumulator + currentValue;
});

console.log(sum); // 输出: 15

上面的例子中,reduce()方法对numbers数组中的所有元素执行累加操作。callback函数接收四个参数:accumulator表示累加器的初始值(如果没有提供初始值,它将等于数组的第一个元素),currentValue表示当前元素的值,index表示当前元素的索引,array表示原始数组。callback函数将accumulatorcurrentValue相加,得到一个新的值,最终返回这个值作为下一次调用callback函数时的accumulator

  1. initialValue参数(可选) initialValue参数是可选的,它表示累加器的初始值。如果提供了这个参数,reduce()方法将从数组的第一个元素开始执行累加操作,累加器的初始值将等于initialValue。如果没有提供这个参数,reduce()方法将从数组的第二个元素开始执行累加操作,累加器的初始值将等于数组的第一个元素。
const numbers = [1, 2, 3, 4, 5];

const sum = numbers.reduce((accumulator, currentValue) => {
  return accumulator + currentValue;
}, 10);

console.log(sum); // 输出: 25

上面的例子中,reduce()方法从numbers数组的第一个元素开始执行累加操作,并将累加器的初始值设置为10callback函数将累加器和当前元素相加,并返回一个新的值,作为下一次调用callback函数时的累加器。最终的结果是15 + 10,即25

JavaScript中的forEach()方法和reduce()方法都是用于遍历数组的方法,但是它们的返回值不同,这是由它们的设计目的所决定的。

forEach()方法是用来遍历数组中的每一个元素,并对每一个元素执行一个回调函数。它并不需要返回值,因为它的主要目的是为了执行某些操作而不是返回某个值。因此,即使在回调函数中返回一个值,它也不会对forEach()方法本身产生任何影响。它的返回值总是undefined。

而reduce()方法则是用来对数组中的元素进行累加或者累加计算,并且需要返回一个最终的累加结果。reduce()方法接收两个参数:一个回调函数和一个初始值。回调函数需要返回一个值,用于累加计算,而最终的结果就是这个累加值。因此,reduce()方法需要返回一个值,这个值就是最终的累加结果。

总之,forEach()方法和reduce()方法都是用于遍历数组的方法,但是它们的返回值不同。forEach()方法不需要返回值,而reduce()方法需要返回最终的累加结果。