数组有两种定义方式:
1 var arr = []; 数组字面量
这即使里面只写逗号也行 只是值会为undefined
如 var arr = [1,2, , ,5]; 数组长度仍然为5(稀松数组)
2 var arr = new Array();
括号里也可以添参数 由此构成数组 但是不能像数组字面量那样 只写逗号 这里必须写值
如 var arr = new Array(1,2,3,4,5);
如果只传一个值 表示索要创建数组的长度 所以传一个值时 要符合规范 比如写小数就不符合
var arr = new Array(10); 数组长度为10
数组就是一个特殊的对象 所以它会像对象一样 不会产生索引越界的问题
如 var arr = []; arr[10]; //系统会给你返回 undefined
但是若直接往数组第10为里面存值 那么数组长度就直接变为11
改变原数组
1 push()
往数组最后一位上添加 并返回添加后数组的长度
2 pop()
移除数组的最后一位 并返回被移除的数据
3 unshift()
往数组首位上添加 并返回添加后数组的长度
如 var arr = [1,2,3];
arr.unshift(4,5);
//结果为 [4,5,1,2,3]
4 shift()
移除数组的首位 并返回被移除的数据
5 reverse()
返回逆转顺序之后的数组
*6 splice(从第几号索引开始,截取多少长度,往截取处添加新的数据)
也可以不添加新数据 返回截取后的数组
数组这里索引可以写负数 底层会自动给负数加上当前数组的长度
比如 pos += pos > 0 ? 0 : this.length;
数组长度为4 索引写-1 则对应索引为3
如 var arr = [1,2,3,5];
arr.splice(3,0,4);
//结果为 [1,2,3,4,5]
7 sort()
数组按asc码的次序排列 asc码位于前面的排在前面
若想改变这一排列规则 可以自己传参一个函数 sort(function)
规则:
1 这个函数必须写两个形参
2 看返回值
2.1 当返回值为负数时 那么前面的数放在前面
2.2 当返回值为正数时 那么后面的数放在前面
2.3 当返回值为0时 不动
函数的运作方式是 每次会传两个数进去 比较这两个数 再根据返回值正负来调整顺序
如 var ar = [1,4,3,2];
arr.sort(function (a,b){
if(a>b){
return 1;
}else{
return -1;
}
});
//传参 [1,4] 返回-1 则前面的数放在前面 数组不变[1,4,3,2]
//传参 [1,3] 返回-1 数组不变[1,4,3,2]
//传参 [1,2] 返回-1 数组不变[1,4,3,2]
//传参 [4,3] 返回1 则后面的数放在前面 数组变为[1,3,4,2]
//传参 [3,2] 返回1 数组变为[1,2,4,3]
//传参[4,3] 返回1 数组变为[1,2,3,4]
//排序完毕 类似与冒泡排序
如上可简写为
arr.sort(function (a,b){
//return a-b;升序
//return b-a;降序
});
不改变原数组
1 concat()
连接两个数组
如
var arr = [1,2,3];
var arr1 = [4,5,6];
arr.concat(arr1);
//得到一个全新的数组[1,2,3,4,5,6]
//注意原数组不发生变化
2 slice(从该位截取,截取到该位前)
若不说明截取到第几位 默认到结尾
若参数都不写 则整个截取
如
var arr = [1,2,3,4,5,6];
arr.slice(1,3);
//得到一个新的数组[2,3]
//注意原数组不发生变化
arr.slice();
//得到一个新的数组[1,2,3,4,5,6]
3 join(字符串形式的参数)
按照参数连接数组为一个字符串
如果不传参 默认用逗号 , 连接
如
var arr = [1,2,3];
arr.join(‘-‘);
//得到一个字符串 ‘1-2-3’
3.1 split(字符串形式的参数)
按照参数将字符串拆分数组
如果不传参 就不拆 整个字符串装入数组
如
var str = ‘a-b-c’;
str.split(‘-‘);
//得到一个数组[‘a’,’b’,’c’]