刚才无聊看Github Trends,发现了这个神奇的项目freecodecamp,号称可以免费和跟很多人组团学编程,我看了下基本都是前端内容,包括JS/HTML/CSS这些基础内容,深入学习的话还有React, D3等等,后端现在只涉及到了 Node,学习方式是交互式的在线编程,提倡 Read-Search-Ask,比自己学好处体现在可以问别人,而且还有机会参见线下活动,感觉很赞。So, 今天开个坑,把自己的学习笔记放在这里。第一篇就用简单算法开头, 后面不定期更.

反转字符串

如:hello -> olleh

1
2
3
4
5
6
function reverseString(str) {
str = str.split('').reverse().join('');
return str;
}

reverseString("hello");

注意两个''代表空字符串,不能丢

计算阶乘

如:5! = 1 * 2 * 3 * 4 * 5 = 120

1
2
3
4
5
6
7
8
9
function factorialize(num) {
if(num <= 1) {
return 1;
} else {
return num * factorialize(num - 1);
}
}

factorialize(5);

这样写比较消耗资源,还可以使用尾递归进行优化,以后有空填上。

检查是否为回文

如:'eye' -> true, 'Zz' -> true, 'race car' -> true, 'never odd or even' -> true, 0_0 (: /-\ :) 0-0 -> true, gua~ -> false

1
2
3
4
5
6
7
8
9
10
function palindrome(str) {
// 统一为小写,除去空格、逗号、句号
str = str.toLowerCase().replace(/[ |\,|\.|\_|\-|\(|\)]/g,'');
// 反转
var rts = str.split('').reverse().join('');

return str==rts?true:false;
}

palindrome("never odd or even");

这里主要是一个正则表达式,需要把空格,逗号,句号等标点去掉。

找出一段文字中的最长单词,返回该单词长度

如:'What is the average airspeed velocity of an unladen swallow' -> 8

1
2
3
4
5
6
7
8
function findLongestWord(str) {
return str
.split(' ')
.sort(function(a,b){return a.length-b.length;})
.pop().length;
}

findLongestWord("What is the average airspeed velocity of an unladen swallow");

参考了StackOverflow上一位答主的方法

  • sort()默认会将数字转换为字符串进行比较,如果需要定制排序方法,可以给 sort() 自定义一个比较函数,这个函数返回值为负数,顺序不变,反之交换位置。《JS 语言精粹》讲到这里时有更多例子,包括怎样排序包含数字、文字等的复杂列表 etc.

  • pop()返回Array()最右端的元素.

把一个字符串转换成标题(单词首字母大写)

如:'Don't you LOVE me' -> 'Don't You Love Me'

1
2
3
4
5
6
7
function titleCase(str) {
return str
.toLowerCase()
.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
}

titleCase("I'm a little tea pot");

中文里基本上用不到,有兴趣可以看下:用 charAt(0) 替换 or 用正则表达式替换