【小记录】4/28基础知识的重要性

244 阅读2分钟

前言

这是一个箭头函数的小知识。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....