return (a,b) //引发的思考
//返回值为 b
我当时就懵逼了,这是什么鬼?为什么还有这种操作?
demo是这样的:
let json = {
a:{
x: 12,
y: 13
},
b:{
x: 1,
y: 3
}
}
//我需要把数据转化为
let arr = [
{
name:a,
x:12,
y:13
},
{
name:b,
x:1,
y:3
}
]
//然后就看到了一个骚操作
Object.keys(json).reduce((result,item)=>{
return (result.push({
name:item,
...json[item]
}),result)
},[])
//说实话我当时就懵逼了
详细剖析一下我的懵逼点
return (result.push({
name:item,
...json[item]
}),result)
带括号干嘛?直接return result.push()不就ok了吗,事实证明不ok。
原因 arr.push()是有返回值的,返回数组的长度。直接返回会导致报
错,长度.push() 必须报错。
再不济我可以写成
result.push(item)
return result
这个没毛病也可以看懂。
接下来开始搜索相关问题,由于我的无知甚至搜索了reduce的相关文章和push的文章,一无所获。
后来突然想到会不会和“,”有关
然后就搜到了MDN的逗号操作符,尼玛第一句就是:
逗号操作符 对它的每个操作数求值(从左到右),并返回最后一个操作数的值。
function myFunc () {
var x = 0;
return (x += 1, x); // the same of return ++x;
}
呵呵 到此问题是得到了完美解释。
结论就是多读点书!