数组方法
Array.prototype.join
数组转为字符串并返回字符串
var arr = [1,2,3];
arr.join();//'1,2,3'
arr.join('_');//'1_2_3'
function repeatString(str,n){
return new Array(n+1).join(str);//数组的undefined被忽略
}
repeatString('a',3);//'aaa'
repeatString('Hi',5);//'HiHiHiHiHi'
Array.prototype.reverse
将数组逆序
var arr = [1,2,3];
arr.reverse();//[3,2,1]
arr;//[3,2,1],原数组被修改
Array.prototype.sort
排序
var arr = ['a','d','c','b'];
arr.sort();//['a','b','c','d'],字母顺序排序
arr = [13,24,51,3];
arr.sort();//[13,24,3,51]
arr;//[13,24,3,51],原数组被修改
arr.sort(function(a,b){
return a-b;
});//[3,13,24,51],降序则改为:return b-a
arr = [{age:25},{age:99},{age:39}];
arr.sort(function(a,b){
return a.age-b.age;
});
arr.forEach(function(item){
console.log('age',item.age);
});
//age 25
//age 39
//age 99
Array.prototype.concat
返回数组合并
var arr = [1,2,3];
arr.concat(4,5);//[1,2,3,4,5]
arr;//[1,2,3],原数组未被改变
arr.concat([10,11],13);//[1,2,3,10,11,13] 拉平一次
arr.concat([1,[2,3]]);//[1,2,3,1,[2,3]] 拉平一次
Array.prototype.slice
返回部分数组
var arr = [1,2,3,4,5];
arr.slice(1,3);//[2,3]
arr.slice(1);//[2,3,4,5]
arr.slice(1,-1);//[2,3,4]
arr.slice(-4,-3);//[2]
Array.prototype.splice
数组拼接
var arr = [1,2,3,4,5];
arr.splice(2);//returns [3,4,5]
arr;//[1,2]
var arr = [1,2,3,4,5];
arr.splice(2,2);//returns [3,4]
arr;//[1,2,5]
var arr = [1,2,3,4,5];
arr.splice(1,1,'a','b');//returns [2]
arr;//[1,'a','b',3,4,5]
Array.prototype.map
数组映射
var arr = [1,2,3];
arr.map(function(x){
return x + 10;
});//[11,12,13]
arr;//[1,2,3]
Array.prototype.filter
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.filterfunction(x){
return index % 3 === 0 || x >= 8;
});//[1,4,7,8,9,10]
arr;//[1,2,3,4,5,6,7,8,9,10]
Array.prototype.every & some
数组判断
var arr = [1,2,3,4,5];
arr.every(function(x){
return x < 10;
});//true,每个元素都要满足
arr.every(function(x){
return x < 3;
});//false
arr.some(function(x){
return x === 3;
});//true,只需要满足一个元素
arr.some(function(x){
return x === 100
});//false
Array.prototype.reduce & reduceRight
var arr = [1,2,3];
arr.reduce(function(x, y){
return x + y;//参数x表示累加器累加回调的返回值,y表示正在数组处理的值
});//6
arr;//[1,2,3]
var arr = [3,6,9];
arr.reduce(function(x, y){
console.log(x + "|" + y);
return x > y ? x : y;//返回值再赋值给累加值x,在此的效果则为筛选最大值
});
// 3|9
// 9|6
max;//9
var arr = [3,6,9];
arr.reduceRight(function(x, y){
console.log(x + "|" + y);
return x > y ? x : y;//这里的第一个元素为最右边的9
});
// 9|6
// 9|3
max;//9
Array.prototype.indexOf & lastIndexOf
数组检索
var arr = [1,2,3,2,1];
从左往右查找
arr.indexOf(2);//1,返回2的索引位置
arr.indexOf(99);//-1
arr.indexOf(1,1);//4,第二个参数表示查找的开始位置
arr.indexOf(1,-3);//4
arr.indexOf(2,-1);//-1
//从右往左查找
arr.lastIndexOf(2);//3
arr.lastIndexOf(2,-2);//3
arr.lastIndexOf(2,-3);//1
Array.isArray
判断是否为判断
Array.isArray([]);true
//其他方式
[] instanceof Array;//true
({}).toString.apply([]) === '[object Array]';//true
[].constructor === Array;//true
数组小结
数组和一般对象
- 相同
- 都可以继承
- 数组是对象,对象不一定是数组
- 都可以当做对象添加删除属性
- 不同
- 数组自动更新length
- 按索引访问数组常常比一般对象属性明显迅速
- 数组对象继承Array.prototype上的大量的数组操作方法
字符串和数组
var str = 'hello world';
str.charAt(0);//'h'
str[1];//e
Array.prototype.join.call(str,'_');//'h_e_l_l_o__w_o_r_l_d'