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()
方法的两个参数的详细解释和示例:
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
函数将accumulator
和currentValue
相加,得到一个新的值,最终返回这个值作为下一次调用callback
函数时的accumulator
。
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
数组的第一个元素开始执行累加操作,并将累加器的初始值设置为10
。callback
函数将累加器和当前元素相加,并返回一个新的值,作为下一次调用callback
函数时的累加器。最终的结果是15 + 10
,即25
。
JavaScript中的forEach()方法和reduce()方法都是用于遍历数组的方法,但是它们的返回值不同,这是由它们的设计目的所决定的。
forEach()方法是用来遍历数组中的每一个元素,并对每一个元素执行一个回调函数。它并不需要返回值,因为它的主要目的是为了执行某些操作而不是返回某个值。因此,即使在回调函数中返回一个值,它也不会对forEach()方法本身产生任何影响。它的返回值总是undefined。
而reduce()方法则是用来对数组中的元素进行累加或者累加计算,并且需要返回一个最终的累加结果。reduce()方法接收两个参数:一个回调函数和一个初始值。回调函数需要返回一个值,用于累加计算,而最终的结果就是这个累加值。因此,reduce()方法需要返回一个值,这个值就是最终的累加结果。
总之,forEach()方法和reduce()方法都是用于遍历数组的方法,但是它们的返回值不同。forEach()方法不需要返回值,而reduce()方法需要返回最终的累加结果。