JS 7
1. ***数组:
API:
拼接和选取
修改
翻转
****排序: 自定义排序算法: 冒泡排序
sort()
1. 拼接和选取:
拼接: 将其它元素或其它数组拼接到当前数组末尾,返回新数组
var newArr=arr1.concat(值1,值2,arr2,......)
强调: 1. 无权修改原对象,只能返回新对象
2. 打散传入的数组参数——珍贵
选取: 复制原数组中指定位置的元素组成新数组
var subArr=arr1.slice(starti,endi+1);
强调: 1. 无权修改原对象,只能返回新对象
2. 规律: 所有两个参数都是下标的API,都含头不含尾
简写: 1. 省略第二个参数: arr1.slice(starti)
从starti位置一直选取到结尾
2. 不写参数: arr1.slice()——复制整个数组中所有元素
3. 如果离结尾近:
arr1.slice(arr1.length-n,arr1.length-m+1)
选择倒数第n到倒数第m的元素
arr1.slice(-n,-m+1);
2. 修改数组splice: 删除,插入,替换
删除: arr.splice(starti,n) 从arr中starti开始,删除n个元素
强调: 1. 不遵循含头不含尾
2. 直接修改原数组
3. starti也支持负数参数,表示倒数第n个位置
简写: 省略第二个参数: arr.splice(starti) 删除starti后所有
返回值: var deletes=arr.splice(starti,n)
返回被删除的元素组成的临时新数组
插入: arr.splice(starti,0,值1,值2,...)
在arr中starti位置插入: 值1,值2,...
原starti位置及其之后的值,向后顺移
强调: 不能打散数组参数
替换: arr.splice(starti,n,值1,值2,...)
在arr中先删除starti位置后的n个元素
再在starti位置插入新元素
强调: 删除的元素个数和插入的新元素个数不必一样
数组自动调整length
3. 翻转数组: arr.reverse();
4. ****排序:
自定义排序算法: 冒泡,快速,插入
冒泡: 原理:
1. ***数组:
排序:
栈和队列:
二维数组:
2. ***String
1. 排序:
自定义排序: 冒泡
排序API: arr.sort();
大问题: 默认将所有元素转为字符串再按字符串排列
只能对字符串类型的元素正确排序
解决: 自定义比较规则:
比较器函数: 专门比较任意两值大小的函数:
要求: 两个参数: a,b
返回值: 如果a>b,就返回正数
如果a<b,就返回负数
如果a=b,就返回0
最简单的数字比较器函数:
function compare(a,b){return a-b;}
如何使用: 将比较器函数名作为参数传入sort函数中
arr.sort(compare) //强调: 不要加()
compare函数作为参数传入sort中,被sort反复调用
降序: 颠倒比较器函数的正负号,可改升序为降序
最简单的数字降序比较器函数:
function compare(a,b){return b-a;}
2. 栈和队列: js中没有专门的栈和队列类型
一切栈和队列都是用普通数组模拟的
栈: 一端封闭,只能从另一端进出的数组
特点: FILO
何时: 今后只要希望始终使用最新的元素时
如何:
1. 从结尾出入栈:
入: arr.push(值) => arr[arr.length]=值
出: var last=arr.pop()
特点: 每次出入栈,都不影响其他元素的位置
2. 从开头出入栈:
入: arr.unshift(值)
出: var first=arr.shift()
特点: 每次出入栈,其它元素位置都会依次顺移
队列: 只能从一端进入,从另一端出的数组
特点: FIFO
何时: 只要希望按先后顺序使用数组中的元素时
1. 结尾入: 入: arr.push(值)
2. 开头出: var first=arr.shift()
3. 二维数组:
什么是: 数组中的元素又引用了另一个子数组
何时: 1. 保存横行竖列的二维数据结构
2. 对一组数据,再进行细致分类时
如何:
创建: 2种:
1. 创建数组时,还不知道子数组的内容:
var arr=[];
arr[0]=[值1,值2,...];
arr[1]=[值1,值2,...];
2. 创建数组同时初始化元素:
var arr=[
[值1,值2,...],
[值1,值2,...],
...
]
访问: arr[r][c]->用法和普通数组元素的用法完全一样
强调: 二维数组,行下标r不能越界!——报错!
遍历: 外层循环控制行,内层循环控制列
for(var r=0; r<arr.length; r++){//遍历每一行
for(var c=0;c<arr[r].length;c++){//遍历第r行中每一列
arr[r][c]//当前元素
}
}