js的数组ECMAScript 5加入的方法(二)

原创 2015年07月07日 23:01:36

some方法,every方法

这两个方法类似“断言”(assert),用来判断数组成员是否符合某种条件。some方法对所有元素调用一个测试函数,只要有一个元素通过该测试,就返回true,否则返回false。

var a =[1, 2, 3, 4, 5].some(function(elem, index, arr){
    return elem >= 6;
});
alert(a);//false
[1, 2, 3, 4, 5].every(function(elem, index, arr){
    return elem >= 3;
});
// 返回false
可以看出some函数只要有部分符合条件,就返回true ,every方法则需要每一个元素都符合才返回true。它们也可以使用第二个参数,用来绑定函数中的this关键字。

reduce方法,reduceRight方法

educe方法和reduceRight方法的作用,是依次处理数组的每个元素,最终累计为一个值。这两个方法的差别在于,reduce对数组元素的处理顺序是从左到右(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他地方完全一样。

reduce方法的第一个参数是一个处理函数。该函数接受四个参数,第一个参数是用来累计的变量,默认0,后三个分别是数组元素,索引,数组本身。

var a = [1, 2, 3, 4, 5].reduce(function(x, y){
    return x+y;
});
alert(a);//15

可以利用reduce方法写一个数组的sum函数

Array.prototype.sum = function (){
    return this.reduce(function (partial, value){
        return partial + value;
    })
};
[3,4,5,6,10].sum(); //28
那么reduce方法有第二个参数吗?也是绑定this吗?答案是不是,它的第二参数表示累计值的初始值,我们可以为它设计一个初始值。
Array.prototype.sum = function (){
    return this.reduce(function (partial, value){
        return partial + value;
    },10);
};

alert([3,4,5,6,10].sum());

由于reduce方法依次处理每个元素,所以实际上还可以用它来搜索某个元素。比如,下面代码是找出长度最长的数组元素。
function findLongest(entries) {
  return entries.reduce(function (longest, entry) {
    return entry.length > longest.length ? entry : longest;
  }, '');
}

indexOf 和 lastIndexOf

ECMAScript 5新增的9个方法之中,有2个与函数式编程无关,分别是indexOf和lastIndexOf。

indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。

var a = ['a','b','c'];

a.indexOf('b')
// 1

a.indexOf('y')
// -1

indexOf方法还可以接受第二个参数,表示搜索的开始位置。

['a','b','c'].indexOf('a', 1)
// -1

上面代码从位置1开始搜索字符a,结果为-1,表示没有搜索到。

lastIndexOf方法返回给定元素在数组中最后一次出现的位置,如果没有出现则返回-1。

var a = [2, 5, 9, 2];

a.lastIndexOf(2)
// 3

a.lastIndexOf(7)
// -1

注意,如果数组中包含NaN,这两个方法不适用。

[NaN].indexOf(NaN) // -1
[NaN].lastIndexOf(NaN) // -1

这是因为这两个方法内部,使用严格相等运算符(===)进行比较,而NaN是唯一一个不等于自身的值。

上面这些数组方法之中,有不少返回的还是数组,所以可以链式使用

var users = [{name:"tom", email:"tom@example.com"},
             {name:"peter", email:"peter@example.com"}];

users
.map(function (user){ return user.email; })
.filter(function (email) { return /^t/.test(email); })
.forEach(alert);
// 弹出tom@example.com






版权声明:本文为博主原创文章,未经博主允许不得转载。

【js学习笔记-043】-- ECMAScript5数组方法

ECMAScript5提供了9个新数组方法:遍历、映射、过滤、检测、简化、和搜索数组    大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数。如果是稀疏数组,对不存在的元素不调用...

ECMAScript 5中的数组方法

(JavaScript权威指南 笔记)ECMAScript 5定义了几个新的数组方法, 根据功能可以分为 遍历 - forEach; 映射 - map; 过滤 - filter; ...

ECMAScript 5中最常用的数组处理方法

最全面最常用的ECMAScript 5中最常用的数组处理方法 。。。。

ECMAScript5数组新增方法

forEach(function(element,index,arr)) 改变原数组,遍历数组 var a = ["a","b",1,2,3]; a.forEach(function(elemen...

ECMAScript5特性介绍之数组篇

Es5的特性以及发布很长时间了,增加了很多实用的特性(Array的 indexOf、every,some,forEach等,Object的create,keys,isFrozen等),这些特性已经得到...

ECMAScript5新增数组API的一些细节

ECMAScript5新增的数组方法看似都比较简单其实还是有一些细节需要了解的 首先这些方法都不会作用于原数组,其实对稀松数组的处理上. (1)这些方法在稀松数组缺少的元素上都不会执行回调函数 (...

JS Array ECMAScript5 Methods

JavaScript 的新版本(ECMAScript 5)中,为数组新增了一些方法。这些方法包括:           forEach(f [,o]): 此方法类似于for/in循环,其作用是遍历整...

ECMAScript6(ES6)标准之数组Array扩展方法

ES6对于数组又扩展了很多方法 包括静态方法和原型链上添加的方法 让我们可以更方便的操作数组静态方法Array.from()这个方法可以将 类数组对象(有length属性的对象)和可遍历对象(E...

Javascript中ECMAScript数组相关方法操作

JS中数组相关操作方法,以及浏览器对这些方法的支持情况!

ECMAScript5 Object的新属性方法(包含Object.create()、Object.defineProperty()等)

虽然说现在并不是所有的浏览器都已经支持ECMAScript5的新特性,但相比于ECMAScript4而言ECMAScript5被广大浏览器厂商广泛接受,目前主流的浏览器中只有低版本的IE不支持,其它都...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:js的数组ECMAScript 5加入的方法(二)
举报原因:
原因补充:

(最多只允许输入30个字)