Javascript减少速记不返回对象
为什么一个能工作而另一个不行Javascript减少速记不返回对象,javascript,ecmascript-6,Javascript,Ecmascript 6,为什么一个能工作而另一个不行 const b = { age: 20, name: "John Doe" } const sortedB = Object.entries(b).sort().reduce((acc, [key, val]) => acc[key] = val,{}); 输出:John Doe 顶部省略了表示自动返回acc的块括号。 底部是使用大括号,这意味着您必须手动返回acc const sortedB = Object.entries(b).sort(
const b = {
age: 20,
name: "John Doe"
}
const sortedB = Object.entries(b).sort().reduce((acc, [key, val]) => acc[key] = val,{});
输出:John Doe
顶部省略了表示自动返回acc的块括号。
底部是使用大括号,这意味着您必须手动返回acc
const sortedB = Object.entries(b).sort().reduce((acc, [key, val]) => {
acc[key] = val;
return acc;
},{});
输出:{age:20,name:“John Doe”}
顶部省略了表示自动返回acc的块括号
不,不是这个意思。JavaScript应该如何/为什么知道返回acc
如果有一个箭头函数,其中只有一个表达式作为主体,则返回该表达式的结果。赋值的结果就是被赋值的值。例如:
var func=()=>1;
console.log(func());//1.
func=x=>x;
console.log(func(42))//42
func=(x,y)=>y=42;
console.log(func(1,2));//42
func=x=>(x,42);
console.log(func(21));//42
func=x=>(42,x);
console.log(func(21));//21
正如在另一个答案中已经解释的那样,acc[key]=val
表达式无法自动返回acc,因为它的计算结果是val
,而不是acc
ES6中的reduce
函数可以方便地使用的配方是Object.assign
,因为它返回一个扩展的对象:
Object.entries(b).sort().reduce((acc, [key, val]) => Object.assign(acc, { [key]: val }) ,{});
它比
acc[key]=val更昂贵;return acc
,但可以在非关键位置使用(在性能关键位置对象中。也不欢迎使用条目和reduce
),并且可以与隐含的箭头返回一起使用。您甚至可以在ES6
中使用短版本:
Object.entries(b).sort().reduce((acc, [key, val]) => ({ ...acc, ...{ [key]: val } }),{});
这是一个聪明的逗号操作符用例,谢谢!当你使用它的时候,你觉得代码的可读性怎么样?好问题。我认为逗号运算符是一种不常用的运算符,因此了解它及其工作原理的人可能会更少。从这个角度来看,可读性可能会受到影响。