Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有人能解释一下吗?减少函数代码?_Javascript - Fatal编程技术网

Javascript 有人能解释一下吗?减少函数代码?

Javascript 有人能解释一下吗?减少函数代码?,javascript,Javascript,有一些很棒的答案,我真的很喜欢奥利奥的答案,但似乎无法理解其中的逻辑 这是: 函数countInArray(数组,值){ 返回数组.reduce((n,x)=>n+(x==value),0); } log(countInArray([1,2,3,4,4,4,3,4]);//3基本上,以下代码添加数组中的所有元素: [1, 2, 3].reduce((a, b) => a + b, 0); 上面的0是累加器的初始值a是累加器的当前值,每个循环中,累加器都会使用函数的返回值进行更新 在代码

有一些很棒的答案,我真的很喜欢奥利奥的答案,但似乎无法理解其中的逻辑

这是:

函数countInArray(数组,值){
返回数组.reduce((n,x)=>n+(x==value),0);
}

log(countInArray([1,2,3,4,4,4,3,4]);//3
基本上,以下代码添加数组中的所有元素:

[1, 2, 3].reduce((a, b) => a + b, 0);
上面的
0
是累加器的初始值
a
是累加器的当前值,每个循环中,累加器都会使用函数的返回值进行更新

在代码中:

array.reduce((n, x) => n + (x === value), 0);
您正在给出要计数的
值。任何等于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;
var计数=0;
对于(var i=0;i
这将减少
数组中的函数计数

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

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

数组。reduce函数用于将数组缩减为单个值。它有两个参数

  • 用于还原的函数 此函数传递两个值,第一个值是前一个数组的缩减值 元素,第二个是当前数组元素

  • (可选)缩减的初始值,如果忽略,则为第一个数组 元素被使用

  • 例如:

    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()), []);
    
    数组.reduce的另一个近亲是数组.reduceRight,它基本相同,但从右到左(从高索引到低索引)遍历数组

    例如:

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

    你卡在哪里了?你能解释一下吗,你懂什么“但在开始时没有先前的功能”,这就是开始值发挥作用的地方。