js的数组ECMAScript 5加入的方法(二)
来源:互联网 发布:语音变声器软件 编辑:程序博客网 时间:2024/06/06 03:20
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')// 1a.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)// 3a.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
0 0
- js的数组ECMAScript 5加入的方法(二)
- js的数组ECMAScript 5加入的方法(一)
- ECMAScript 5中最常用的数组处理方法
- Ecmascript中数组的五种迭代方法
- ECMAScript的数组
- ECMAScript 5中的数组方法
- ECMAScript 5中的数组方法
- ECMAScript中数组的各种方法的整理
- js学习笔记(二),数组的方法
- <Js>ECMAScript变量的声明
- JavaScrip数组方法+ECMAScript 5新增
- ECMAScript 6(11)——数组的扩展
- ECMAScript 6 入门学习(7.数组的扩展)
- js数组的方法
- JS数组的方法
- js数组的方法
- js数组的方法
- JS数组的方法
- 每天一个linux命令(10):cat 命令
- 初探springmvc
- 通过IF({1,0}和VLOOKUP函数实现Excel的双条件多条件查找
- centos7 创建桌面快捷方式(chrome,eclipse)
- hdu 2571 命运
- js的数组ECMAScript 5加入的方法(二)
- 2015-7-4
- udp服务端和客户端程序示例
- android sqlite 数据类型
- 深入java单例模式(转)
- 每天一个linux命令(11):nl命令
- 2015070710 - 晚11早4作息
- 回调机制详解
- Two Sum