JavaScript计算属性
我正在学习James Moore的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
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
仅表示:
{…acc[review]:count+1}
只是一个对象扩展函数,这意味着:保留累加器的任何键值对,但合并对特定键值对所做的更改
{...acc, [review]: count + 1}
在这里,它将acc
展开,对于当前元素,它将1
添加到先前的计数中
[1,3,3]
例如,当您在第一个元素上循环此数组时,即1
groupBy将返回如下对象
{1:1}
现在在第二次迭代中,当前元素是3
,因此groupBy将传播上一个对象,并且由于3
在socount=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
来访问值的。它被称为括号表示法,您可以使用动态键访问对象中的条目。代码基本上统计了评审评分的数量:因此您需要存储每个评审分数的计数。最简单的方法是创建一个对象,该对象包含数组中所有复习分数的键:)