javaScript数组
什么是数组
值得有序集合。也是一种对象。
js数组是弱数据类型的,数组中可以含有不同数据类型的元素。
数组长度:0 到2得23次幂-1
创建方式
字面量
var array = [];
构造器
//可以不用new,等价用new。
var array = new Array();
var array = new Array(100); //100个空元素
var array = new Array(1,2,34,’11‘);//初始化数组
读写/增加/删除/遍历
读写
//读
arr[锁引]
//写
arr[锁引]=值
增加
arr[arr.length] //尾部添加,返回添加的值
push//尾部,返回数组长度
unshift //头部,返回数组长度
删除
delete arr[2] //锁引2的位置会变成undefind,数组长度不变
arr.length -=1; //尾部,返回删除的值
pop() //尾部,返回被删除得元素
shift()//头部,返回被删除得元素
遍历
for循环
for … in… //输出原型,不保证顺序。 需要配合arr.hasOwnProperty(i) 判读是否是自己的元素。
二维数组/稀疏数组
二维数组:[[1,2],[3,4]]。
稀疏数组:没有0开始连续得锁引 遍历用 in 或者判断是否为undefind
数组方法
数组方法来自于Array.prototype。
join
将数组内部用字符串连接,返回字符串,不改原来数组。
var arr = [1,2,3];
arr.join("_");//"1_2_3";
///示例:
//创建空数组,空数组间用要传入得字符串填充。
function repeatString(str,n){
return new Array(n+1).join(str);
};
repeatString("a",3);
//"aaa"
reverse
数组逆序 ,变化原来得数组
arr.reverse();
sort
排序 数字 转为字符串再排序 ,变化原来得数组。
var arr = [1,2,3];
arr.sort();
//如果是负数那就是 123 ;如果是正数那就是321。
arr.sort(function(a,b){
return a-b;
});
//对象排序
arr.sort(function(a,b){
return a.age - b.age;
});
concat
合并数组,返回值获取,不改变原来数组
var arr = [1,2,3];
arr.concat(4,5)
arr.concat(4,5,[6,7]);//[1, 2, 3, 4, 5, 6, 7] //数组会被拉平
arr.concat([8,[9,10]]);//[1, 2, 3, 8, [9, 10]] //数组不会被拉平两次
slice
返回部分数组,不改变原来数组
var arr = [1,2,3];
arr.slice(1,2);//[2] 参数1:开始取得位置 参数2:结束取得位置:等于[1,2);
arr.slice(1);//[2] 参数 锁引1开始 到最后
arr.slice(1,-1);//[2]参数负数 是后面往前数 ,-1 开始
splice
指定添加或者删除
删除:返回删除数据,修改原来数组
//删除
var arr= [1,2,3,4];
arr.splice(2);//(2)?[3, 4]
arr//[1, 2];
//删除并添加:
var arr= [1,2,3,4];
arr.splice(2,1,'a','b','c');//[3] 删除了3
arr//[1, 2, "a", "b", "c", 4] 在3得位置添加 abc
forEach
遍历arr.forEach,ie9以上使用,不修改原来数组
var arr = [1,2,3,4,5];
arr.forEach(function(x,index,a){
console.log(x,index,a)
})
//参数1 是数组值 ;参数2 下标 ;参数3 数组本身
1 0 (5)?[1, 2, 3, 4, 5]
2 1 (5)?[1, 2, 3, 4, 5]
3 2 (5)?[1, 2, 3, 4, 5]
4 3 (5)?[1, 2, 3, 4, 5]
5 4 (5)?[1, 2, 3, 4, 5]
map
遍历 arr.map 不修改原来数组
var arr = [1,2,3,4,5];
arr.map(function(x){
return x+10;
})//[11, 12, 13, 14, 15]
fillter
过滤,不修改原来数组
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.filter(function(x,index){
return index % 3 === 0 || x > 8;
});//[1, 4, 7, 9, 10]
every/some
所有数组复合条件判断
arr.every(function(x){
return x<11
}) //全满足
arr.some(function(x){
return x===3
}) //存在一个元素
reduce/reduceRigth
//放回值作为x 和 下一个元素做逻辑处理
redeceRigth//(只是从右边开始)
//两两相加,最后一个参数作为初始值
arr.reduce(function(x,y){
console.log(x,y)
return x+y
},0);
//最大值最小值判断
arr.reduce(function(x,y){
console.log(x,y)
return x>y?x:y;
},0);
indexOf/lastIndexOf
查询下标indexOf/lastIndexOf(右往左查找)
arr.indexOf(2,1); //查2的下标,从第二个元素开始
判断对象是否是数组
是Array构造器的方法,不能用arr的porotype上的方法
Array.isArray(arr);//true
对象和数组的区别
相同:都可以继承属性,对象不一定是数组,都可以当对象添加删除属性
不同:特殊的length 数组方法原型prototype继承下来的。
字符串和数组的区别
字符串:类数组 不可改写的数组 没有数组的方法
var str ="hello"
str.charAt(0);//"h"
Array.prototype.join.call(str,"_");//用call更改指向使用数组的方法。