有人可以解释一下.reduce功能代码吗?

Mil*_*ler 2 javascript

找出一个数组元素出现多少次有一些很好的答案,我真的很喜欢Oriol的答案,但似乎无法弄清楚逻辑。

这里是:

function countInArray(array, value) {
  return array.reduce((n, x) => n + (x === value), 0);
}
console.log(countInArray([1, 2, 3, 4, 4, 4, 3], 4)); // 3
Run Code Online (Sandbox Code Playgroud)

我看过https://www.geeksforgeeks.org/javascript-array-reduce-method/https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/减少,但我仍然对复杂性感到困惑。

我知道0是起始总数,根据实际情况x===1应该等于1或0。

我主要与n混淆,因为我读到n是前一个函数的返回值,但是开始时没有前一个函数。

Pra*_*man 5

基本上,以下代码将所有元素添加到数组中:

[1, 2, 3].reduce((a, b) => a + b, 0);
Run Code Online (Sandbox Code Playgroud)

0上面是蓄能器的初始值。a是累加器和每个循环的当前值,累加器将使用函数的返回值进行更新。

在您的代码中:

array.reduce((n, x) => n + (x === value), 0);
Run Code Online (Sandbox Code Playgroud)

您正在value计算。等于true并加到数字上的任何东西都等于1,增加计数。

因此,如果您有类似以下内容:

var value = 5;
var x = 5;
var n = 3;
(x === value) // becomes true
n + (x === value);
Run Code Online (Sandbox Code Playgroud)

因此,以上代码成为n + (true)技术上的代码n + 1

这样,在您的完整循环中,将使用累加器对值进行计数并作为总和返回给您。

下面的代码:

array.reduce((n, x) => n + (x === value), 0);
Run Code Online (Sandbox Code Playgroud)

等效于以下内容:

var count = 0;
for (var i = 0; i < array.length; i++) {
  if (array[i] === value)
    count = count + 1;
}
return count;
Run Code Online (Sandbox Code Playgroud)