20180922_ARTS_week13
栏目: JavaScript · 发布时间: 6年前
内容简介:第十三周,算法题 Longest Common Prefix,看了一篇讲 JavaScript 不好的地方以及如何规避的文章,记录JavaScript 在日期操作方面的小 tip,分享了对于知识付费。这个题比较简单,用循环硬做也可以,这里做了一个小小的优化,先排序了一下,如果不排序的话,遇到如果不想排序,也可以先遍历一下,找到最短的那个作为循环次数。
第十三周,算法题 Longest Common Prefix,看了一篇讲 JavaScript 不好的地方以及如何规避的文章,记录JavaScript 在日期操作方面的小 tip,分享了对于知识付费。
Algorithm
/** * Longest Common Prefix * https://leetcode.com/problems/longest-common-prefix/description/ * * @param {string[]} strs * @return {string} */ var longestCommonPrefix = function (strs) { if (strs.length == 0) { return ""; } strs.sort() // 按字母顺序 var len = strs.length; var loopCount = strs[0].length; var num = 0; for (var i = 0; i < loopCount; i += 1) { if (strs[0][i] == strs[len-1][i]) { num += 1; } else { break; } } return strs[0].substr(0, num); }; console.log(longestCommonPrefix(["flower","flow","flight"])) // fl console.log(longestCommonPrefix(["dog", "racecar", "car"])) // ""
这个题比较简单,用循环硬做也可以,这里做了一个小小的优化,先 排序 了一下,如果不排序的话,遇到 ["aaa","aa","aaa"]
这种形式就会出错。
如果不想排序,也可以先遍历一下,找到最短的那个作为循环次数。
Review
Javascript, the bad parts, and how to avoid them
https://medium.com/@Rewieer/javascript-the-bad-parts-and-how-to-avoid-them-1a7c9bc5a0dd
作者在文章中介绍了几个 JavaScript 不好的地方,比如:
类型
比如在判断一个变量是不是对象的时候,你需要 if (typeof myObject === "object" && myObject !== null)
,因为 null 也是个对象。关于这个的解决方案,作者推荐使用 TypeScript 和 FlowType。
数字类型
JavaScript 中的数字是双精度浮点型,这会造成一些困扰,比如
0.1 + 0.2 // 0.30000000000000004
也就是 0.1 + 0.2 === 0.3
是不成立的。 作者推荐的解决方案是使用 decimal.js
。
数字和字符串加法的奇怪问题
10 + "10" // "1010"
这会产生一个非常容易忽略的问题,当用户输入的时候,都是字符串型的,如果不记得做类型转换,直接做加法处理就会出错。 解决方案,当然是记得先用一堆 parseInt, parseFloat, .toString()
处理 :-)
回调地狱
关于 JavaScript 回调地狱的问题已经是老生常谈了,解决方案方面作者推荐使用 Promise , Async/Await , Generator 来优化。
关于回调地狱和 Async/Await 的内容也可以参考我之前写的文章 异步多图加载这件小事儿(Promise与async)
Tip
记录几个 JavaScript 在日期操作方面的小 tip。
// 根据日期获取当前是星期几 getWeek(day) { const weekArr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']; return weekArr[day]; } getWeek(new Date(x).getDay()) // 返回日期如果是 10 以下,在前面补 0 function getFull(n) { return (n > 9 ? '' : '0') + n; } var x = getFull(3); //03 var y = getFull(11); //11 // 格式化时间 Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日 "h+": this.getHours(), //小时 "m+": this.getMinutes(), //分 "s+": this.getSeconds(), //秒 "q+": Math.floor((this.getMonth() + 3) / 3), //季度 "S": this.getMilliseconds() //毫秒 }; if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); return fmt; } 调用: var time1 = new Date().Format("yyyy-MM-dd"); var time2 = new Date().Format("yyyy-MM-dd hh:mm:ss");
Share
这周想分享一点对知识付费的想法。
最开始接触知识付费是从得到开始的,再到在行,知乎 Live,掘金小册,极客时间,接触这类产品也有一段时间了。最大的感想是要懂得选择,不要盲目付费。
要知道人的精力时间是有限的,花几十到几百买个专栏自己就能学会是不现实的。其实和买书一样的道理,不是你买了就会了,还需要投入大量的时间去学习实践练习,可能才能大致了解,期望仅仅通过一个专栏就获得很大提升是不现实的。
除此之外,还要特别注意知识付费产品的质量。知识付费市场现在正处于一个风口,不单单是各种产品不断涌现,各种知识输出者也想分一杯羹,造成的现象就是各种专栏或者 Live 质量参差不齐。
特别要警惕和当下热点结合的专栏,比如微信小程序。很多想学微信小程序的人可能连相关文档都没怎么看过,看到专栏就跑去买,殊不知专栏大多是把小程序文档内容大概过一遍,与其这样,不如自己啃文档自学,还能锻炼学习能力。所以最好能先看看专栏的目录,然后对应去找一些资料,看是不是很浅的东西,不要无脑买。
其实买书也是这个道理,一些书找一堆人写推荐,不一定就是因为这本书多么好。
说了挺多,感觉挺负面的,不过知识付费有其积极的作用,可以作为一个好的筛选,然后对分享者也可以产生一定的激励,做专栏可比卖书要赚的多,而且能有互动。
最后,用心学,总能学到东西的。
碎碎念
记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。
微信公众号:程序员的诗和远方
公众号ID : MonkeyCoder-Life
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。