ECMAScript5 Array新增的方法

2016年11月13日Web前端0

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