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






版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tustyao/article/details/46795687

Ecmascript中数组的五种迭代方法

ECMAScript 5为数组定义了5个迭代方法。 每个方法都接收两个参数:要在每一项上运行的函数和 (可选的)运行该函数的作用域对象一一影响this 的值。传入这些方法中的函数会接收三个参数:数组...
  • qq_21767263
  • qq_21767263
  • 2017-02-28 14:29:57
  • 206

ECMAScript中数组的各种方法的整理

自己整理的ECMAScript中数组类型的各种方法,举例通俗易懂,还是觉得自己总结几遍记得比较牢靠。共勉...
  • khadijiah
  • khadijiah
  • 2017-08-23 22:21:55
  • 182

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

ECMAScript 5新增了9个数组实例的方法,分别是map、forEach、filter、every、some、reduce、reduceRight、indexOf和lastIndexOf。其中,...
  • tustyao
  • tustyao
  • 2015-07-07 22:02:15
  • 374

EA&UML日拱一卒-0基础学习微信小程序(12)-ECMAScript5数组操作方法

首先补充说明一下,ECMAScript是欧洲计算机制造商协会(European Computer Manufacturers Association) 为了统一各种script,以JavaScri...
  • craftsman1970
  • craftsman1970
  • 2018-01-16 20:13:52
  • 137

EcmaScript5和EcmaScript6规范一览表

EcmaScript5.1规范于2011年6月发布,现在主流的浏览器基本上都已经支持,这些浏览起包括IE9、IE10,ff21及其以上,safari6及其以上,opera12及其以上都已经基本支持。具...
  • houyaowei
  • houyaowei
  • 2016-05-18 15:35:37
  • 2508

ECMAScript5(ES5)标准中扩展的数组Array方法

上次整理ES6的数组扩展方法 觉得ES5的数组方法都忘得差不多了 索性就复习总结一下 ES5扩展的数组方法还是很有用的迭代forEach()这是ES5数组方法中最基本的一个了 也非常的简单,就...
  • q1056843325
  • q1056843325
  • 2016-12-28 14:45:13
  • 1832

ECMAScript6 快速上手(新手必看)

随着google和firfox以及node6.0对es6的支持,es6语法的定稿使它越来越受到关注,尤其是react项目基本上都是用es6来写的。是时候从es5到es6转变了 一、相关背景介绍 我...
  • daily886
  • daily886
  • 2016-12-20 17:09:45
  • 7034

ECMAScript 5.1中文版

  • 2014年01月22日 11:47
  • 730KB
  • 下载

ECMAScript5.1规范中文版

  • 2014年02月14日 11:36
  • 1.11MB
  • 下载

Javascript中ECMAScript数组相关方法操作

JS中数组相关操作方法,以及浏览器对这些方法的支持情况!
  • hzaini89
  • hzaini89
  • 2016-06-24 10:18:00
  • 809
收藏助手
不良信息举报
您举报文章:js的数组ECMAScript 5加入的方法(二)
举报原因:
原因补充:

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