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

时间:2019-08-15 19:39:44

标签: javascript

Finding out how many times an array element appears有一些很好的答案,我真的很喜欢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

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

我知道0是起始总数,x===1应该等于1或0,这取决于事实。

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

3 个答案:

答案 0 :(得分:5)

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

[1, 2, 3].reduce((a, b) => a + b, 0);

上面的0是累加器的初始值。 a是累加器的当前值,每个循环都使用该函数的返回值更新累加器。

在您的代码中:

array.reduce((n, x) => n + (x === value), 0);

您要给value进行计数。等于true并加到数字上的任何东西都等于1,增加计数。

所以,如果您有类似的东西:

var value = 5;
var x = 5;
var n = 3;
(x === value) // becomes true
n + (x === value);

因此,上面的代码变成n + (true),从技术上来说,它是n + 1

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

以下代码:

array.reduce((n, x) => n + (x === value), 0);

等同于以下内容:

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

答案 1 :(得分:0)

这会减少value中的功能计数array

.reduce( (n, x) => n + (x === value), 0)

n是最后的reducer值(第一个值为0-last reduce的参数)。 x是当前元素。仅当+(x === value)等于1x才是value,否则为0。因为在=>之后我们不使用花括号,所以我们返回表达式n + (x === value)

答案 2 :(得分:-1)

Array.reduce 函数用于将Array减小为单个值。它有两个参数

  1. 用于归约的函数 此函数传递两个值,第一个是前一个数组的精简值 元素,第二个是当前数组元素。

  2. (可选)简化的初始值,如果忽略,则为第一个数组 使用了元素

示例:

var name = ["J", "a", "v", "a"].reduce((a, b) => a + b); // "Java".
var sum = [1, 2, 3].reduce((a, b) => a + b); // 6.
var ret = functionArray.reduce((retArray, func) => retArray.push(func()), []);

Array.reduce 的另一个表兄弟是 Array.reduceRight ,它基本上相同,但是从右到左(从较高的索引到较低的索引)遍历数组< / p>

示例:

var name = ["a", "v", "a", "J"].reduce((a, b) => a + b); // "Java".