第 19 周,算法题 Search Insert Position,看了一篇对比 Yarn 和 npm 的文章,介绍了 JavaScript 中 new 运算符的一些坑,分享了对于业务和技术重构的一些看法。
Algorithm
代码语言:javascript复制/**
* Search Insert Position
* https://leetcode.com/problems/search-insert-position/
*
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function(nums, target) {
for (var i=0; i<nums.length; i =1) {
if (target <=nums[i]) {
return i
}
}
return i
};
console.log(searchInsert([1,3,5,6], 5)) // 2
比较简单的一题,数组都排好序了,直接 loop 一下就好。
Review
Yarn vs npm - which Node package manager to use in 2018?
https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/
文中作者分别对比了 Yarn 与 npm 的优缺点,最后推荐了 npm。
在我看来,相比 npm,Yarn 最大的优点是会把装过的包缓存下来,这样下次再用到的时候就不用等待漫长的下载时间了。
不过由于 npm 是直接打包在 node 里,而且已经是 node 中使用最广泛的包管理工具,所以我还是建议优先使用 npm。
Tip
分享个 JavaScript 中关于 new 运算符的特性。 一般情况下 new 运算符会返回一个对象:
代码语言:javascript复制function Thing() {
this.one = 1;
this.two = 2;
}
var myThing = new Thing();
myThing.one // 1
myThing.two // 2
但是如果我们尝试在 Thing() 中 return 一个值:
代码语言:javascript复制function Thing() {
this.one = 1;
this.two = 2;
return 5;
}
var myThing = new Thing();
myThing.one // 1
myThing.two // 2
会发现 return 的值不见了,并没有什么用。
如果我们换一种方式,尝试 return 一个对象。
代码语言:javascript复制function Thing() {
this.one = 1;
this.two = 2;
return {
three: 3,
four: 4
};
}
var myThing = new Thing();
console.log(myThing); // Object {three: 3, four: 4}
结果返回的对象取代了原本我们的对象。 这可以说是 new 运算符的一个特性,如果返回的是原始类型(数字,string 等)就会被忽略,而如果返回的是非原始类型(Object,Array,function 等)就会替代原来的对象。
这个『特性』需要注意,一不小心就踩到坑了。
Share
这周思考一个问题,对于接手一个旧项目是否要彻底重构?
新接手几个项目,组里有人想彻底重构一把。对于这个问题我是这样看的,最好是分步骤来,遇到页面有较大改动的,可以进行重构。
因为业务不等人,不可能有机会停下来让你做 2-3 个月的重构,而且老项目单元测试,文档,自动化测试都相对缺失,重构的质量进度都不好把控。
其实,很多做技术的人只关注技术,总想用最新最酷的技术。能和业务情况结合当然最好,如果不能,技术还是要做些妥协的,毕竟业务做好了,公司活下来是一切的基础