数组
-
数组的声明
(1)字面量 var arr=[1,2,3]
(2)构造函数 new Array()
①声明数组同时赋值 new Array(1,2,3)
②声明数组同时定义数组的长度 new Array(10) -
数组的操作
(1)利用数组的索引,操作数组某个具体的元素。arr[idx],idx取值为0到数组的长度-1
(2)数组的长度 arr.length
(3)数组的遍历 for循环 -
数组的方法
(1) 增删改,原数组会改变。
① arr.push(item) 往数组arr后面推入一个数组元素
② arr.unshift(item) 往数组arr前面推入一个数组元素
③ arr.pop() 删除数组arr的最后一个元素
④ arr.shift() 删除数组arr的第一个元素
⑤ arr.splice(idx,delNum,item[,item])
参数:idx 索引 delNum 删除元素的数目 itme元素(可添加多个元素);
作用:删除元素 splice(idex,delNum)
添加元素 splice(idex,0,itme)
修改元素 splice(idex,1,itme)
增加方法的返回值:数组的长度
删除方法的返回值:被删除的那个元素
splice方法返回值:被删除的元素组成的数组
(2) arr.reverse() 将原数组arr的元素颠倒顺序,返回倒序后的数组- 原数组会改变
(3) arr.sort() 原数组排序,返回值为排序后的数组
- 默认用字符的ASCII进行比较
- sort(function(a,b){return a-b;}) 从小到大排序
- sort(function(a,b){return b-a;}) 从大到小排序
- 原数组会改变
(4) arr.slice(start[,end]) 返回值为裁切数组的某一部分组成的数组
- 从start开始到end(但不包括end所对应的元素)
- end省略,代表裁剪到数组的最后一项
- 支持负数 (数组最后一项索引可以为-1)
- 原数组不会改变
(5) arr.Join(“分隔符”) 将数组拼成字符串,返回值为拼接后的字符串
- 默认分隔符为逗号
- 原数组不会改变
(6) arr.concat(数组1[,数组2]) 返回一个新数组
- 这个新数组是由调用这个方法的数组arr和参数组成
- 原数组不会改变
- 原数组会改变
排序(冒泡排序,选择排序,快速排序)(leng为数组长度)
1.冒泡排序(相邻两个元素add[j],add[j+1]依次比较)
- 当前元素跟下一个元素对比
- 把最大的逐个往后排列
第一层for循环i为比较的轮数,i=1从第一轮开始,i<leng;
第二层for循环j为每轮比较的次数,j=0从索引0开始,j<leng-i;
2.选择排序(用当前元素add[i]依次与后面元素add[j]比较)
- 把当前元素分别跟后面的元素对比
- 把最小的逐个往前排列
循环变量i,j为索引号;
第一层for循环i要遍历所有元素(是循环结束i遍历所有元素);
第二层for循环j要遍历i索引号后边的所有元素,用add[i]和add[j]进行比较;
3.快速排序
- 利用递归实现(循换递归调用自己,当数组长度小于等于1时,函数返回数组)
(1)找出中间的索引号(数组元素若奇数,用parseInt()取整);
(2)splice()删除数组中间索引的元素,返回被删除的组成的数组,然后获取被删除元素 的值。
(3)定义max、min两个数组,大于中间数就放在max数组里面,小于中间数就放在min数 组里面。
数组的传递及复制
-
传递 var brr=arr;
此时传递的是arr在堆中的地址给brr,所以一旦brr的值修改,arr也会受影响。 -
复制
(1) For循环拷贝arr里面的每个元素
(2) 也可以用slice(0),切出整个数组
多维数组
1.数组套数组arr=[[],[],[]]
- var arr = [[“小白菜”,“萝卜”,“土豆”],[“肥牛”,“鸡肉”,“牛肉丸”]];
Es5新增数组的方法
- (arr数组里面可以套对象,若操作键的值,通过item.key)
-
遍历方法(fn有三个参数:item:数组中的每一项元素 idx:索引 arr:当前数组)
(1) arr.forEach(fn) 等同于for循环
arr.forEach(function(item,idx,arr){
console.log(item);
})
(2) arr.map(fn)
返回一个数组(数组长度等于原数组),返回的数组里面的元素是什么取决于在fn中返回的值
var res = arr.map(function(item,idx,arr){
return item*10;
//也可以返回字符串拼接(return '<li>'+item+'</li>')
})
(3) arr.filter(fn)
返回一个数组,存放执行fn后返回true的数组元素,利用这个方法可对 数组元素进行过滤
var res = arr.filter(function(item,idx,arr){
return item>20;
})
(4) arr.some(fn)
判断数组中是否有一个元素满足return的条件,有即返回true.
(5) arr.every(fn)
判断数组中元素是否满足return的条件,有一个不满足条件,最终返回 false
- 归并方法 arr.reduce(fn,initval)
(1) fn的参数:
①prev:上一次函数的返回值- 若reduce的第二个参数initval有值,则prev第一次的值为initval
- 若reduce的第二个参数initval没有值,则prev第一次的情况会默认以索引为0 对应的元素的prev的值
②item:当前数
③idx:当前索引
④arr:数组
var arr = [10,20,30,40,50,55];
var res = arr.reduce(function(prev,item,idx,arr){
console.log(prev,item,idx);
return prev+item;
},0)
console.log(res);
静态方法
Array.isArray()判断是否为数组
数组的索引方法
(1) indexOf(keyword[,startIdx])
(2) lastIndexOf(keyword[,startIdx])
- startIdx可省略,若存在代表从startIdx开始查找
- 返回keyword所在数组中的索引值,如果数组不存在keyword,则返回-1
- 应用: 判断数组中是否存在某个值