一、数组定义
保存任意类型的数据集合
(1)构造函数方式实现: var arr = new Array()
可以制定数组的长度
(2) var a = [];
二、数组数据操作
(1)赋值方式
var a1 = [];
a1[0] = "hello";
var a2 = ["a","b"];
a2[1] = b;
(2)指定长度
var arr = new Array(3)
长度为3的数组
arr[0] --> undefined
arr.length;
var arr = [,,];
arr[1] --> undefined
(3)数组的遍历
var arr = [23,24,25,26]; 下标从0开始
[1] for (var i =0; i < arr.length; i++){
arr[i];
}
[2] for in
for(var i in arr){
}
(4)数组的添加和删除
var arr = [34,56,12];
push(88); 在数组末尾添加数据,对原数组进行修改,返回值为修改后的数组长度
pop(); 在数组末尾删除一个数据 返回的是被删除的元素
unshift(); 在数组起始添加数据 对原数组进行修改,返回值为修改后的数组长度
shift(); 在数组起始删除一个数据 返回的是被删除的元素
三、数组的操作方法
1、reverse() :对原数组进行翻转
var arr = [1,2,3,4,5,6];
arr.reverse();
[ 6,5,4,3,2,1 }
2、join(); 制定分隔符 将数组转换为字符串 生成新的字符串
var a = "1,2,3,4,5"
var b = a.split(",");
b.join(""); 12345
3、concat(); 连接数组,将数据添加到数组的末尾,不修改原数组 生成新的数组,只能打散一维数组
不会打散数组中包含的数组
var a = "1,2,3,4,5"
var b = "6,7";
a1.concat(b);
var a = [1,2,3,4,5];
var b = [6,7];
console.log(a.concat(b)); [1, 2, 3, 4, 5, 6, 7]
console.log(a.concat(55,66)); [1, 2, 3, 4, 5, 55, 66]
console.log(a.concat([88,99],[11,22]))[1, 2, 3, 4, 5, 88, 99, 11, 22]
console.log(a.concat([[11,22]],[33,44],"abc"));[1, 2, 3, 4, 5, Array(2), 33, 44, 'abc']
4、slice() 截取子数组 不修改原数组 生成新的数组
起始不包含 终止包含
如为负数,由右向左倒数截取
var a = [1,2,3,4,5];
a.slice(2,4) [3,4]
a.slice(1,4) [2, 3, 4]
a.slice(2) [3, 4, 5]
a.slice(2,10) [3, 4, 5]
a.slice(-4,-2) [2, 3]
5、splice() 增加和删除数组元素
splice(arg1,arg2,arg3...)
arg1 = 起始位置
如只有一个参数,表示从起始位置删除所有的元素,返回的是被删除的元素
如果第一参数为负数,则从右向左查找
arg2 = 删除元素个数
如果有两个参数,表示被删除的元素个数
如果第二个参数为负数,默认变为0
arg3及后面所有参数 要插入数组中的元素
var a= [1,2,3,4,5,6,7]
a.splice(1,2,3,4,5) [1,3,4,5,4,5,6,7]
从下标1处删除两个元素,把新添加元素3,4,5 添加到删除位置处
b = a.splice(2) a = [1,2] / b = [3,4,5,6,7]
a.splice(2,2) [1,2,5,6,7]
a.splice(2,0) [1,2,3,4,5,6,7]
a.splice(2,0,0,0,0) [1,2,3,0,0,0,4,5,6,7]
a.splice(-2,-3,7,8) [1,2,3,4,5,6,7,8,7,8]
四、数组检测
var arr = [];
1、typeof(arr) --> Object
2、Array.isArray(a1) true
3、if(arr instanceof Array){} true
4、arr.constructor == Array true
五、数组的toString()方法
所有对象都有toString() valueOf() toLocaleString()
toString():每个值的字符串形式,以,拼接数组转字符串
六、数组的下标
var arr = [0,1,2,3,4,5];
arr[0] -- > 0
范围:0 - 2^32
arr[true] undefined
obj = {name:"tt"}
arr[true] -- > 当作obj处理
arr[-2] undefined
arr[1.6] undefined
下标可以是逐渐递增的表达式
var arr = [];
for (var i = 0;i<10;i++){
arr[i++] = i;
}
七、数组函数
数组函数
1、indexOf() 返回数组中第一个找到的元素的位置,不存在返回 -1
2、forEach()
数组.forEach(function(遍历元素值,下标,当前数组){})
var arr = [1,2,3,4,5,6,7,8,9,10]
arr.forEach(function(item, index,arr) {
console.log(item,index)
item数组值 index数组下标 arr数组本身
})
3、map() 对数组的每一项进行遍历
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.map(function (item, index, arr) {
return item * 2;
}).map(function (item, index){ --链式调用
return item * 10;
});
***** map()与forEach的区别
1、forEach只是遍历,map可以生成新的数组
2、map比forEach速度更快
3、map可以进行链式调用
4、filter() 数据过滤
数组.filter(function(遍历元素值,下标,当前数组){})
(1)返回新数组,不对原数组修改
(2)对返回true的结果过滤,false的结果忽略
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
提取出 > 30的数据
var arr2 = arr.filter(function(item){
return item > 5;
})
5、reduce() 接受一个函数作为累加器,数组中的每一个值,从左到右开始缩减
最终计算为一个值
数组.reduce(function(初始值,遍历元素值,下标,当前数组){},赋初始值(可省略))
a1 = [1,2,3,4,5];
a2 = a1.reduce(function(init,value,index,arr){
return init + value;
// 将init value 逐次累加 返回最终结果
})
6、some() 判读数组是否有满足条件的元素 相当于||
数组.some(function(遍历元素值,下标,当前数组){})
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr.some((item,index) =>{
return item > 6;
});
true
返回Boolean类型,true: 如果找到了满足条件的元素,返回true则循环结束,跳出循环体
false: 没有找到,循环继续。
函数的执行次数 不等于数组的长度
7、every() 检测数组中所有元素是否都满足指定条件 相当于&&
数组.every(function(遍历元素值,下标,当前数组){})
有一项不满足就返回false,都满足才返回true
函数的执行次数不一定等于数组长度
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
arr.every((item) =>{
return item > 0;
});