创建数组
// 创建一个空数组
var arr1 = new Array();
var arr2 = Array();
var arr3 = [];
// 创建一个长度为5的数组,它包含5个undefined
var arr1 = new Array(5);
var arr2 = Array(5);
// 创建一个长度为3的数组,它的包含“red”,“blue”和“green”.
var arr1 = new Array('red', 'blue', 'green');
var arr2 = Array('red', 'blue', 'green');
var arr3 = ['red', 'blue', 'green'];
数组的长度
var arr = [1, 2, 3];
arr.length = 2;
arr // [1, 2]
arr.length = 5;
arr // [1, 2, undefined, undefined, undefined]
数组的检测
var arr = [1, 2, 3];
// 方法1
arr instanceof Array // true
// 方法2 ECMAScript5 推荐
Array.isArray(arr) // true
数组的转换方法
// 数组转换时,undefined为""
var person1 = {
toLocaleString : function () {
return "toLocaleString1";
},
toString : function() {
return "toString1";
}
};
var person2 = {
toLocaleString : function () {
return "toLocaleString2";
},
toString : function() {
return "toString2";
}
};
var people = [person1, person2];
people // toString1,toString2
people.valueOf() // toString1,toString2
people.toString() // toString1,toString2
people.toLocaleString() // toLocaleString1,toLocaleString2
people.join() // toString1,toString2
people.join('||') // toString1||toString2
栈方法
var arr = [0];
var n = arr.push(1, 2, 3);
arr // [0, 1, 2, 3]
n // 4
n = arr.push(4);
arr // [0, 1, 2, 3, 4]
n // 5
var i = arr.pop();
arr // [0, 1, 2, 3]
i // 4
队列方法
var arr = [0, 1, 2, 3];
var i = arr.shift();
arr // [1, 2, 3]
i // 0
var n = arr.unshift(4, 5);
arr // [4, 5, 1, 2, 3]
n // 5
数组排序
var arr = [0, 1, 3, 2, 10];
// 反转原数组顺序
var re = arr.reverse();
arr // [10, 2, 3, 1, 0]
re // [10, 2, 3, 1, 0]
// 按toString()排序
var so = arr.sort();
arr // [0, 1, 10, 2, 3]
so // [0, 1, 10, 2, 3]
// 自定义排序方法 数值由小到大排序
arr.sort(function(a, b) {
return a<b ? -1 : 1;
});
arr // [0, 1, 2, 3, 10]
// 对于数值类型,数值由小到大排序 推荐方法
arr.sort(function(a, b) {
return a-b;
});
arr // [0, 1, 2, 3, 10
操作方法
// 数组合并
var arr1 = [0, 1, 2];
var arr2 = arr1.concat(3, [4, 5], [6, 7]);
arr1 // [0, 1, 2]
arr2 // [0, 1, 2, 3, 4, 5, 6, 7]
// 数组截取
var arr1 = [0, 1, 2, 3, 4, 5];
var arr2 = arr1.slice(1);
var arr3 = arr1.slice(1, 4);
var arr4 = arr1.slice(-4, -2);
arr1 // [0, 1, 2, 3, 4, 5]
arr2 // [1, 2, 3, 4, 5]
arr3 // [1, 2, 3]
arr4 // [2, 3]
// 万能大法 splice()
var arr1 = [0, 1, 2, 3, 4, 5];
var arr2 = arr1.splice(0, 2); // 删除
arr1 // [2, 3, 4, 5]
arr2 // [0, 1]
arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(2, 0, 7, 8, 9); // 插入
arr1 // [0, 1, 7, 8, 9, 2, 3, 4, 5]
arr2 // []
arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(2, 2, 7, 8, 9); // 删除并插入
arr1 // [0, 1, 7, 8, 9, 4, 5]
arr2 // [2, 3]
arr1 = [0, 1, 2, 3, 4, 5];
arr2 = arr1.splice(-2, 2, 7, 8, 9); // 删除并插入2
arr1 // [0, 1, 2, 3, 7, 8, 9]
arr2 // [4, 5]
查询元素位置
var arr = ['a', 'b', 'c', 'd', 'c', 'b', 'a'];
arr.indexOf('c') // 2
arr.lastIndexOf('c') // 4
arr.indexOf('c', 3) // 4
arr.lastIndexOf('c', 3) // 2
arr.lastIndexOf('c', -5) // 2
// 查询用的是===比较
var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
people.indexOf(person) // -1
morePeople.indexOf(person) // 0
数组迭代方法
/*
* 以下每个方法都接收两个参数:
* 1. 要在每一项上运行的函数
* 参数包括:当前元素,当前下标,原数组
* 2. (可选的)运行该函数的作用域对象——影响this的值
*/
var arr = [0, 1, 2, 3, 4, 5];
// 数组中任何元素都满足函数中的条件,返回true,否则返回false
var ev = arr.every(fun1);
ev // false
// 数组中有元素满足函数中的条件,返回true,都不满足返回false
var so = arr.some(fun1);
so // true
// 返回数组中满足函数条件的元素数组
var fi = arr.filter(fun1);
fi // [4, 5]
// 返回数组所有元素运行函数后的结果
var ma = arr.map(fun2);
ma // [0, 2, 4, 6, 8, 10]
// 相当于for循环,没有返回值
var fo = arr.forEach(fun2);
fo // undefined
// 判断元素是否大于3
function fun1(item, index, array) {
return item>3;
}
// 元素值 * 2
function fun2(item, index, array) {
return item*2;
}
缩小方法(在我看来依旧是迭代方法~)
var arr = [0, 1, 2, 3, 4, 5];
// 从前向后迭代,返回最终结果
var re = arr.reduce(fun1);
console.log(re);
// prev=0 cur=1 index=1 arr=0,1,2,3,4,5
// prev=1 cur=2 index=2 arr=0,1,2,3,4,5
// prev=3 cur=3 index=3 arr=0,1,2,3,4,5
// prev=6 cur=4 index=4 arr=0,1,2,3,4,5
// prev=10 cur=5 index=5 arr=0,1,2,3,4,5
// 15
// 从后向前迭代,返回最终结果
var rr = arr.reduceRight(fun1);
console.log(rr);
// prev=5 cur=4 index=4 arr=0,1,2,3,4,5
// prev=9 cur=3 index=3 arr=0,1,2,3,4,5
// prev=12 cur=2 index=2 arr=0,1,2,3,4,5
// prev=14 cur=1 index=1 arr=0,1,2,3,4,5
// prev=15 cur=0 index=0 arr=0,1,2,3,4,5
// 15
// 参数(前一个值,当前值,下标,原数组)
function fun1(prev, cur, index, array) {
console.log('prev=' + prev + ' cur=' + cur + ' index=' + index + ' arr=' + array);
return prev+cur;
}