前言
这是一个箭头函数的小知识。ES6的箭头函数大家都很熟悉()=>。相信也会使用。
今天玲珑做算法题的637求二叉树层的平均值用广度遍历+迭代实现后,想着用深度遍历再试一下。
结果当然是没有通过,仔细分析逻辑感觉没毛病。好像没有错误啊。😢
于是过了很久很久,想是不是我箭头函数有问题?
翻开阮老师的ES6,发现确实是箭头函数的问题。
错误实例
//错误的
var averageOfLevels = function(root) {
//深度DFS
let arr = [];
if(!root) return arr;
const Deepfs = (root, level) => {
(arr[level]||(arr[level]=[])).push(root.val);
if(root.left)Deepfs(root.left, level+1);
if(root.right)Deepfs(root.right, level+1);
}
Deepfs(root, 0);
return arr.map(item => {item.reduce((pre, cur)=> pre+cur)/item.length});
};

亡羊补牢
阮一峰老师的书里面说:
由于大括号括起来会被解释为代码块,如果箭头函数返回的是一个对象,必须在对象的外面使用括号括起来。
如果代码块语句大于一条,要使用大括号括起来,并使用return语句返回
上面的的代码里虽然只有一条语句,但是为了看得更清楚所以用大括号括起了但是没有return出去导致结果都是undefined。
错误原因找到了怎么改?
有两种方法,直接去掉大括号,或者大括号里return出去。如下:
return arr.map(item => { return item.reduce((pre, cur)=> pre+cur)/item.length});
};

最后
为了加深印象,在控制台又证明了一下。

ending....