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仅用于newkey
大小写,如果您将该语句放在这里,将忽略具有相同键的另一个对象(Jane的对象
)。然后您只需在if
子句中初始化值acc[key]=[]
,并将对象推送到所有项的键上。在末尾返回新对象(returnacc
)