Javascript 使用括号键减少功能

Javascript 使用括号键减少功能,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,我不明白下面这行代码是什么意思: if(!acc[key]) 这是我对这句话的解释: 如果键不在acc中,则使用值数组设置键,并跳出If语句。然后在acc键值中按下obj 如果键位于acc中,跳过if语句,使用另一个内存acc[key],设置acc中的键,并使用obj设置值。(需要重大修订) 我的解释正确吗? var-people=[{ 名字:“爱丽丝”, 年龄:21 }, { 名称:“Max”, 年龄:20 }, { 姓名:'简', 年龄:20 } ]; 函数groupBy(objectAr

我不明白下面这行代码是什么意思:

if(!acc[key])
这是我对这句话的解释:

如果
不在
acc
中,则使用值数组设置
,并跳出If语句。然后在
acc
键值中按下
obj

如果
键位于
acc
中,跳过if语句,使用另一个内存
acc[key]
,设置
acc
中的
键,并使用
obj
设置值。(需要重大修订)

我的解释正确吗?
var-people=[{
名字:“爱丽丝”,
年龄:21
},
{
名称:“Max”,
年龄:20
},
{
姓名:'简',
年龄:20
}
];
函数groupBy(objectArray,属性){
返回objectArray.reduce(函数(acc、obj){
var key=obj[属性];
如果(!acc[键]){
acc[键]=[];
acc[键]。推送(obj)
}
返回acc;
}, {});
}
var groupedPeople=groupBy(人,“年龄”)

console.log(JSON.stringify(groupedPeople))
方括号
[]
用于(也称为计算属性名)。是这样的:

var obj = { foo: "bar" };
var propertyWeWant = "foo"; //We want to get obj.foo - the value "bar"
console.log(obj.propertyWeWant); //Returns undefined
console.log(obj[propertyWeWant]); //Returns bar
函数
groupBy
获取一个人员数组,并返回按传递的属性分组的人员(在本例中为
age
):

var-people=[{
名字:“爱丽丝”,
年龄:21
},
{
名称:“Max”,
年龄:20
},
{
姓名:'简',
年龄:20
}
];
函数groupBy(objectArray,属性){
返回objectArray.reduce(函数(acc、obj){
var key=obj[属性];
如果(!acc[键]){
acc[键]=[];
}
acc[键]。推送(obj)
返回acc;
}, {});
}
var groupedPeople=groupBy(人,“年龄”)

console.log(JSON.stringify(groupedPeople))
The
!acc[key]
表示如果属性
key
(它是动态的,就像@Jack Bashford所说的)在对象
acc
中不存在,它将返回
false
reduce
将起作用

  • acc
    init与{}
  • 循环到第一个对象:
    key
    ='21',但是
    acc['21']
    未定义的
    如果
  • 第二:键='20'和
    !acc[键]
    返回真值~>设置
    acc['20']=obj
  • 最后一个对象。键='20',但
    acc['20']
    在步骤3中有值~>跳过块代码并返回
    acc
  • 使用2个键“20”和“21”返回
    acc

  • 结果以20开头的原因是,我认为浏览器希望打印按字母表排序的对象的属性。

    acc[key]。push(obj)应该在if语句之外,否则就没有意义。if(!acc[key])这是什么意思?为什么结果以20开头而不是21请解释if acc[key]。push(obj)超出if子句并返回accFirst,
    reduce
    实际上是一个循环,在
    reduce
    的回调函数中返回的值将在下一次迭代中使用。其次,
    acc[key].push(obj)
    应该在
    if
    子句之外,因为inside仅用于new
    key
    大小写,如果您将该语句放在这里,将忽略具有相同键的另一个对象(
    Jane的对象
    )。然后您只需在
    if
    子句中初始化值
    acc[key]=[]
    ,并将对象推送到所有项的键上。在末尾返回新对象(
    returnacc