众所周知,array的reduce方法很有用,有下面的一段代码:
var obj=new Object();
["person","name"].reduce(function(obj,key){
console.info("obj。。");
console.info(obj);
console.info("key。。");
console.info(key);
console.info(obj[key])
return obj[key] = obj[key] || {};
},obj);
console.info("out..")
console.info(obj)
实际的结果是{"person":{"name":{}}}
请问是为什么?
reduce ECMA5也提供了此方法 “ 将上次 return的结果作为本次的参数” https://msdn.microsoft.com/library/ff679975(v=vs.94).aspx
还有一个函数reduceRight 跟他作用一样只是循环顺序相反
因为
return obj[key] = obj[key] || {};
返回的是 obj[key]
而非 obj
,每次操作都更深入了一层。
是的,改成
obj[key] = obj[key] || {};
return obj;