Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Object_Reducers_Computed Properties - Fatal编程技术网

JavaScript计算属性

JavaScript计算属性,javascript,arrays,object,reducers,computed-properties,Javascript,Arrays,Object,Reducers,Computed Properties,我正在学习James Moore的JavaScript初学者函数编程课程。但是,我目前难以理解以下代码: const reviews = [4.5, 4.0, 5.0, 2.0, 1.0, 5.0, 3.0, 4.0, 1.0, 5.0, 4.5, 3.0, 2.5, 2.0]; const countGroupedByReview = reviews.reduce(groupBy, {}); function groupBy (acc, review){ const count = a

我正在学习James Moore的JavaScript初学者函数编程课程。但是,我目前难以理解以下代码:

const reviews = [4.5, 4.0, 5.0, 2.0, 1.0, 5.0, 3.0, 4.0, 1.0, 5.0, 4.5, 3.0, 2.5, 2.0];

const countGroupedByReview = reviews.reduce(groupBy, {});

function groupBy (acc, review){
  const count = acc[review] || 0;
  return {...acc, [review]: count + 1}
}
虽然我了解reduce方法的工作方式,但我仍在努力理解groupBy函数块中的代码。我相信这与计算属性名称有关。我将非常感谢任何帮助


谢谢。

它认为代码块中没有任何计算属性名称。这段代码的作用是统计数组中每个评审分数的出现次数。让我们首先使用回调的参数逐步完成回调:

回调函数接受2个参数:

  • acc
    是累加器,它是减速器将不断推入的数据。它首先被定义为一个空白对象,作为
    Array.prototype.reduce中的第二个参数
  • review
    只是数组中当前正在迭代的项
现在进入回调本身的代码。行
const count=acc[review]| | 0
仅表示:

  • 如果数组项作为键存在于累加器中,则返回其值
  • 如果数组项在累加器中不作为键存在,则将其值设置为0
  • 在这之后,您只需将计数增加1,因为您刚刚遇到了该项,并且希望将其添加到总计数中,并按数组项的值分组。
    {…acc[review]:count+1}
    只是一个对象扩展函数,这意味着:保留累加器的任何键值对,但合并对特定键值对所做的更改

    {...acc, [review]: count + 1}
    
    在这里,它将
    acc
    展开,对于当前元素,它将
    1
    添加到先前的计数中

    [1,3,3]
    
    例如,当您在第一个元素上循环此数组时,即
    1
    groupBy将返回如下对象

    {1:1}

    现在在第二次迭代中,当前元素是
    3
    ,因此groupBy将传播上一个对象,并且由于
    3
    在so
    count=0
    之前没有出现过,因此groupBy的返回值将为

    {1:1,3:1}

    现在,在第三次迭代中,当前元素是
    3
    ,因此groupBy将扩展先前返回的对象,对于键
    3
    ,它添加
    1
    ,因此返回

    {1:1,3:2}


    一个简单的版本可以是这样的

    const reviews=[4.5,4.0,5.0,2.0,1.0,5.0,3.0,4.0,1.0,5.0,4.5,3.0,2.5,2.0];
    const countGroupedByReview=reviews.reduce(groupBy,{});
    职能分组人(acc,审查){
    acc[审查]=acc[审查]| 0;
    行政协调会[审查]++
    返回acc
    }
    
    log(countGroupedByReview)
    Man该代码比需要的复杂。这种蔓延简直是矫枉过正。是做什么的:
    函数groupBy(acc,review){const count=acc[review]| | 0;acc[review]=count+1;return acc;}
    谢谢!这很有帮助。然而,
    acc[review]
    到底意味着什么?据我所知,这意味着审查索引中的空对象?但是这怎么可能呢?
    acc[review]
    基本上是通过对象
    acc
    中的键
    review
    来访问值的。它被称为括号表示法,您可以使用动态键访问对象中的条目。代码基本上统计了评审评分的数量:因此您需要存储每个评审分数的计数。最简单的方法是创建一个对象,该对象包含数组中所有复习分数的键:)