取整
Math.ceil()
:取整,若带小数点,则进一;Math.round()
: “四舍五入”(只看小数点后一位), 该函数返回的是一个四舍五入后的的整数;Math.floor()
: “向下取整” ,即小数部分直接舍去。
递归
满足以下三个特点就是递归:
- 函数自己调用自己;
- 一般情况有参数;
- 一般情况下有 return;
递归可以解决循环能做的所有事情,甚至循环不容易解决的事情,但是需要大量的开内存,很危险。
方法:
- 首先去找临界值,即无需计算,获得的值;
- 找这一次和上一次的关系;
- 假设当前函数已经可以使用,调用自身计算上一次;
例题
有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一只,第二天照此方法,吃掉剩下桃子的一半多加一只,天天如此,到第 n 天早上,猴子发现只剩一只桃子,问原来这堆桃子有多少只?
peach(n) 表示第 n 天的桃子数。
分析:
peach(10) / 2 - 1 =peach(9);
peach(10) = (peach(9) + 1) * 2;
peach(n) = (peach(n - 1) + 1) * 2;
有上面的方法,可知:
- 临界值为 1;
- 关系为 peach(n) = (peach(n - 1) + 1) * 2;
故代码如下:
function peach(n) {
if(n == 1){
return 1;
}
return (peach(n - 1) + 1) * 2;
}
alert(peach(5)); //46
数组
声明数组的方式:
let arr = new Array(10, true, "hello");
上述方法中,只有一个数字时,数字不表示内容,而是声明多大长度的数组。
而下面这种方法则不是:
let arr =[10, true, "hello"];
数组的相关知识
Math.random()
:随机 [0, 1)parseInt ( Math.random() * 10 )
:随机 0~9 的整数;数组.concat (新增数据...)
:既可以拷贝原数组,生成新数组;也可以合并数组;
返回值:合并成的新数组,原数组不会改变;数组.slice (start, end)
:可以基于当前数组获得指定区域元素 [start, end),提取出元素生成新数组;
返回值:生成的新数组,原数组不会改变;数组.splice (start, length, 数据1, 数据2...)
:增加,删除,修改
start:开始截取的位置;
length:截取的元素的长度;
第三个参数开始:在 start 位置插入的元素;删除直接不写;修改先删除再增加;
返回值:被删除的元素组成的新数组,原数组会改变;
操作 | start | length | 第三个参数开始往后 |
---|---|---|---|
增加 | 开始增加的位置 | 0 | 新增元素1,新增元素2… |
删除 | 开始删除的位置 | 需要删除的元素个数 | 不写 |
修改 | 开始修改的位置 | 需要修改的元素个数 | 替代元素1,替代元素2… |
数组.join (字符串)
:将数组中的元素用传入的拼接符,拼接成一整个字符串;
返回值:拼接好的字符串;数组.reverse();
:逆序;数组.sort();
:数组排序;默认按字符串从小到大排序,存在问题;
用 sort 严格从小到大排序:
let arr = [1,10,30,29,5];
arr.sort(function(value1,value2){ //严格从小到大
return value1 - value2;
})
console.log(arr);
同理,用sort 严格从大到小排序:
arr.sort(function(value1,value2){ //严格从大到小
return value2 - value1;
})
console.log(arr);
栈结构
- 特点:先进后出;
- 结构:从同一头进,从同一头出;
数组.push (元素1,元素2...);
:从数组的末尾添加元素;
返回值:插完元素数组的新长度;数组.pop();
:从数组的末尾取下一个元素;
返回值:数组最后一个元素;
队列结构
- 特点:先进先出;
- 结构:从末尾进,从头部出;
数组.push (元素1,元素2...);
:从数组的末尾添加元素;
返回值:插完元素数组的新长度;数组.shift ();
:从数组的头部取下一个元素;
返回值:数组第一个元素;数组.unshift (元素1,元素2...);
:从数组的头部添加元素;
返回值:插完元素数组的新长度;