递归
function factorial() { // 一个简单的阶乘递归
if (number == 1) {
return number;
} else {
return number factorial(number - 1);
}
}
console.log(factorial(5));
在递归之前,该函数会被挂起,如下图:
5 * factorial(4)
5 * 4 * factorial(3)
5 * 4 * 3 * factorial(2)
5 * 4 * 3 * 2 * factorial(1)
5 * 4 * 3 * 2 * 1
5 * 4 * 3 * 2
5 * 4 * 6
5 * 24
120
JavaScript 数组
创建数组
var numbers = []; // 通过 [] 操作符
var numbers = new Array(); // 通过构造函数
Array.isArray(numbers) // 判断是否数组
数组中的一些常用函数
.indexOf() // 查找元素,大小写敏感,返回索引/返回-1
.join() // 将数组转化为字符串
.toString() // 将数组转化为字符串
A.concat(B) // 合并数组A和B并创建新数组
.splice(起始索引,长度,添加新数组,.....,...) // 从数组里截取一个新数组
.push() // 将一个元素添加到末尾
.unshift() // 将一个元素添加到开头
.pop() // 删除数组末尾的元素
.shift() // 删除数组的第一个元素
.splice(3, 0, 1, 2, 3) // 从索引为3的位置开始插入1,2,3
.reverse() // 翻转数组中的元素
.sort() // 按字典顺序对元素进行排序
// 从小到大排序
fucntion compare(num1, num2) {
return num1 - num2;
}
var nums = [...];
nums.sort(compare);
数组的迭代
不产生新数组的迭代
.forEach(square); // 对数组中的每个元素使用square函数
.every(isEven) // 若每个元素都满足isEven则返回true
.some(isEven) // 只要有一个元素满足isEven则返回true
.reduce(add) // 不断对累加值和后续元素调用add函数,最终返回累加值 / 链接元素
.reduceRight() // 从右往左
生成新数组的迭代
.map(curve) // 返回一个经过curve函数处理后的数组
.filter() // 类似every,返回元素结果为true的新数组
function isEven(num) {
return num % 2 == 0;
}
function isOdd(num) {
return num % 2 != 0;
}
var nums = [];
for(i = 0; i < 10; ++i) {
nums[i] = i+1;
}
var evens = nums.filter(isEven); // 2 4 6 8 10
var odds = nums.filter(isOdd); // 1 3 5 7 9
多维数组
JavaScript: The Good Parts (O'Reilly) P64
Array.matrix = function(numrows, numcols, initial) { // 创建多位数组
var arr = [];
for (var i = 0; i < numrows; ++i) {
var columns = [];
for (var j = 0; j < numcols; ++j) {
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
}
var nums = Array.matrix(5,5,0);
var strings = Array.matrix(5,5,"");