每周完成一个ARTS:
1.A(Algorithm)每周至少做一个 leetcode 的算法题
2.R(Review)阅读并点评至少一篇英文技术文章
3.T(Tip)学习至少一个技术技巧
4.S(Share)分享一篇有观点和思考的技术文章
A
```111```
var addTwoNumbers = function (l1, l2) {
return numToListNode(addListNode(l1, l2));
};
//将 ListNode 转化为数组
function addListNode(...list) {
const valList = list.map((node) => {
const list = [];
while (node) {
list.push(Number(node.val));
node = node.next;
}
return list;
})
return arraySum(valList);
}
// 计算数组的和
function arraySum(list) {
return list.reduce((result, item) => {
return arrayItemSum(result, item);
}, [])
}
// 计算传入的数组的和
function arrayItemSum(a, b) {
let long = a
let short = b
if (b.length>a.length){
long = b
short = a
}
let addOne = 0;
const result = long.reduce((result, val, index) => {
const sum = (result[index] || 0) + val + addOne;
addOne = 1;
const mod = sum % 10;
const div = sum / 10;
if (div < 1) {
result[index] = mod;
addOne = 0;
} else if (div > 1) {
result[index] = mod;
} else {
result[index] = 0;
}
return result;
}, short)
if(addOne){
result.push(1);
}
return result;
}
// 数组构建成 ListNode 结构
function numToListNode(numList) {
let preNode = undefined;
return numList.reduce((result, val) => {
let node = new ListNode(val);
if (preNode) {
preNode.next = node;
preNode = node
} else {
result = preNode = node
}
return result
}, new ListNode(0))
}
声明变量的时候自己需要注意不要有歧义,要规范起来。
多写注释,记录自己的思路,帮助其他人了解自己的想法
R
一些参数只有在实际使用中才能真正体会到它的功能。
通过silent参数可以设置是否显示日志或者警告;
在开发版中,devtools默认为true,允许检查代码,但生产版中默认为false;
任意的被遮挡的钩子或者处理函数返回的Promise链,他的Promise链的错误也会被处理。
T
使用快捷键可以增加编程过程中的趣味,可以在使用中,慢慢积累一些自己喜欢使用的快捷键,便利我们自己的操作
S
前端与算法息息相关
算法会帮助前端实现的更加优雅,以及性能的优化