ECMAScript5 Array新增的方法
ECMAScript 5对数组也新增了几个实用的方法。
Array.isArray
用来判断是否是数组的。注:该方法不在prototype对象上,而是在Array构造器上的。
Array.isArray([]); // true
Array.isArray(''); // false
Array.isArray({}); // false
Array.prototype.indexOf
用于搜索数组中的值,若找到则返回数组下标,无则返回-1。与string的indexOf类似。
var arr = ['a', 'fgh', 'abc', 'zzz', 'poo'];
console.log(arr.indexOf('zzz')); // 3
用起来十分的方便。与string一样,可以设置第二个参数,即从哪个位置开始搜索。
var arr = ['a', 'fgh', 'abc', 'zzz', 'poo'];
console.log(arr.indexOf('zzz', 4)); // -1
Array.prototype.lastIndexOf
与indexOf的搜索顺序相反。
var arr = ['a', 'fgh', 'abc', 'zzz', 'poo'];
console.log(arr.lastIndexOf('zzz')); // 3
同样可以得到3。同样,也有第二参数,
var arr = ['a', 'fgh', 'abc', 'zzz', 'poo'];
console.log(arr.lastIndexOf('zzz', 4)); // 3
Array.prototype.every
对数组的每一个值进行检查,查看是否有不符合条件的值,有则返回false,全部符合才会返回true。
回调函数中的第一个参数是对应的元素值,第二个参数是对应的下表,第三个元素对应的是数组本身,以下同。
var arr = [1, 2, 4, 7, 2, 4, 8, 1, 3];
var result = arr.every(function(value, index, array) {
return (value > 2);
});
console.log(result); // false
Array.prototype.some
判断数组有没有符合条件的元素,存在就返回true。
var arr = [1, 2, 4, 7, 2, 4, 8, 1, 3];
var result = arr.some(function(value, index, array) {
return (value > 2);
});
console.log(result); // true
Array.prototype.filter
用于过滤数组中的某些值。
var arr = [1, 2, 4, 7, 2, 4, 8, 1, 3];
var result = arr.filter(function(value, index, array) {
return (value > 2);
});
console.log(result); // [4, 7, 4, 8, 3]
Array.prototype.map
用于操作数组。
var arr = [1, 2, 4, 7, 2, 4, 8, 1, 3];
var result = arr.map(function(value, index, array) {
return value * 2;
});
console.log(result); // [2, 4, 8, 14, 4, 8, 16, 2, 6]
Array.prototype.forEach
对数组中的每一个元素进行操作,与map不同的是,没有返回值。
var arr = [1, 2, 4, 7, 2, 4, 8, 1, 3];
var result = arr.forEach(function(value, index, array) {
array[index] = value + 2;
});
console.log(result); // undefined
console.log(arr); // [3, 4, 6, 9, 4, 6, 10, 3, 5]
Array.prototype.reduce
对一组数据进行叠加处理。回调函数中,第一个参数是计算的值,第二个是当前值,第三个是项的索引值,第四个是数组本身。
var arr = [1, 2, 3, 4, 5];
var result = arr.reduce(function(pre, cur, index, array) {
console.log('pre: ' + pre);
console.log('cur: ' + cur);
console.log('index: ' + index);
console.log('-------------------');
return pre + cur;
});
console.log(result); // 15
// 前面的一段控制输出是:
/**
*pre: 1
*cur: 2
*index: 1
*-------------------
*pre: 3
*cur: 3
*index: 2
*-------------------
*pre: 6
*cur: 4
*index: 3
*-------------------
*pre: 10
*cur: 5
*index: 4
*-------------------
*/
每次地计算过程如输出的结果。
Array.prototype.reduceRight
reduce的反向处理。仅仅是计算的方向换了下。
var arr = [1, 2, 3, 4, 5];
var result = arr.reduceRight(function(pre, cur, index, array) {
return pre + cur;
});
console.log(result); // 15