作用:单独的变量名,存储任意数据类型的数据。
创建数组
- 字面量
var arr = [];
- 构造函数创建
var arr = new Array()
var arr = new Array(1,2,3)
var arr = new Array(3) // [undefined,undefined,undefined]
var arr = new Array(‘3’) // [‘3’]
数组的遍历
数组的栈方法
数组.push(值) 向数组的尾部添加数据 返回值是数组修改后的长度。
数组.unshift(值)向数组的头部添加数据 返回值是数组修改后的长度。
数组.pop(); 删除数组的最后一项,一次删除一个,返回被删除的项。
数组.shift() 删除数组的最前面一项,一次删除一个,返回被删除的项。
添加返回的都是长度。
删除返回的都是删除项。
三个参数实现添加、删除、替换。 数组.splice(起始下标,删除个数,要添加的项)
排序
fun(a,b)函数为排序函数 a-b从小到大 b-a从大到小。
数组.sort(fun())
选择排序
var arr = [2, 32, 45, 22, 12];
var k = 0;
for (var i = 0; i < 4; i++) {
k = i;
for (var j = i + 1; j < arr.length; j++) {
if (arr[k] > arr[j]) {
k = j;
}
var temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
}
}
console.log(arr);
递归排序
var arr = [2, 32, 45, 22, 12];
console.log(func(arr));
function func(arr) {
if (arr.length <= 1) {
return arr;
}
var left = [];
var right = [];
var num = arr.shift()
for (var i = 0; i < arr.length; i++) {
var v = arr[i];
if (v > num) {
right.push(v);
} else {
left.push(v);
}
}
return func(left).concat(num, func(right));
}
方法
数组反转
数组.reverse()
数组的截取
数组.slice(起始下标,结束下标);
var arr = [‘a’,‘b’,‘c’,‘d’,‘e’];
数组.slice();没参数,返回全部
数组.slice(2);一个参数是起始下标 // [‘c’,‘d’,‘e’]
数组.slice(2,4); //[‘c’,‘d’]
数组.slice(4,2); 第一个参数比第二个参数大,返回[ ]
数组.slice(2,-1);同数组.slice(2,-1+5);负数同长度相加,//[‘c’,‘d’];
var arr = [32,4,2,4,3,4,2,23]
找到返回下标,找不到返回 -1
数组.indexOf(要查找的项,[起始位置]);
arr.indexOf(4) // 1
arr.indexOf(4,2) // 3
arr.indexOf(4,4) // 5
数组.lastIndexOf(要查找的项,[起始位置]) 从右向左查找
arr.lastIndexOf(4) // 5
数组去重
function fn(arr){
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr. length; j++){
if (arr[i] === arr[j]){
arr.splice(j,1);
j--;
}
}
}
return arr;
}
判断参数是否是数组, 是返回true , IE8及以下不支持。
Array.isArray(参数)
为什么用这个 ?
typeof [] 和 typeof null/对象 返回的都是 Object
数组的迭代方法:
参数:数组项,下标,数组本身
作用:循环数组,没有返回值,仅仅替代for循环
数组.forEach(function(item,index,array){})
作用:数组循环,返回由函数调用结果组成的新数组。
数组.map(function(item,index,array){ })
var arr = [2,3,4];
var n = arr.map( function (item,index) {
//console.log( item,index);
return item * 2;
});
console.log(n); //[4,6,8]
作用:循环数组,返回由函数调用结果为true的项,组成新数组
数组.filter(function(item,index,array){ });
var arr = [2,3,4];
var n = arr.filter(function (item,index,array) {
return item > 3;
});
console.log(n);
作用:循环数组,如果每一项函数调用的结果为true 则返回true.
数组.every(function(item,index,array){ })
var arr = [2,3,4,10,20];
var n = arr.every (function (item) {
return item > 1;
});
console.log(n);
作用:只要有一个为真,则返回为真.
数组.some(function(){ })