实例详解ECMAScript5中新增的Array方法
ECMAScript5 给出了一系列新的API接口,这些接口在新的浏览器中大部分是被支持的,IE9,Chrome,FirFor都支持,也有少量API不是所有浏览器都支持,以下内容仅介绍大部分被支持的API。利用新的API我们可以设计出非常靠谱的类,而且还能保持原有的javaScript的风格。
ECMAScript5标准发布于2009年12月3日,它带来了一些新的,改善现有的Array数组操作的方法。(注意兼容性)
在ES5中,一共有9个Array方法:http://kangax.github.io/compat-table/es5/
Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.prototype.some Array.prototype.forEach Array.prototype.map Array.prototype.filter Array.prototype.reduce Array.prototype.reduceRight
下面列举了其中的7种方法,前5种方法很常见,很多开发者都会用到:
1、indexOf()
indexOf()方法返回在该数组中第一个找到的元素位置,如果它不存在则返回-1。
var arr = ['apple', 'orange', 'pear'], found = false; // 未使用 for (var i = 0, l = arr.length; i < l; i++) { if (arr[i] === 'orange') { found = true; } } console.log("found:", found); // ==> found: true // 使用后 console.log("found:", arr.indexOf("orange") != -1); // ==> found: true
2、filter()
该filter()方法创建一个新的匹配过滤条件的数组。
不用 filter() 时:
var arr=[{"name":"apple", "count": 2},{"name":"orange", "count": 5},{"name":"pear", "count": 3},{"name":"orange", "count": 16},] var newArr = []; for (var i = 0; i < arr.length; i++) { if (arr[i].name === "orange") { newArr.push(arr[i]); } } console.log("Filter results:", newArr);
用了 filter():
var newArr = arr.filter(function(item) { return item.name === "orange"; }); console.log("Filter results:", newArr);
3、forEach()
forEach为每个元素执行对应的方法,是用来替换for循环的。
var arr = [1, 2, 3, 4, 5, 6, 7, 8]; // 使用for循环 for (var i = 0, l = arr.length; i < l; i++) { console.log(arr[i]); } // 使用forEach循环 arr.forEach(function(item, index) { console.log(item); });
4、map()
map()对数组的每个元素进行一定操作(映射)后,会返回一个新的数组。
var oldArr = [{first_name: "Colin",last_name: "Toh"}, {first_name: "Addy",last_name: "Osmani"}, {first_name: "Yehuda",last_name: "Katz"}]; function getNewArr() { var newArr = []; for (var i = 0; i < oldArr.length; i++) { var item = oldArr[i]; item.full_name = [item.first_name, item.last_name].join(" "); newArr[i] = item; } return newArr; } var personName = getNewArr(); personName.forEach(function(item, index) { console.log(item); }) /****输出结果: Object {first_name: "Colin", last_name: "Toh", full_name: "Colin Toh"} Object {first_name: "Addy", last_name: "Osmani", full_name: "Addy Osmani"} Object {first_name: "Yehuda", last_name: "Katz", full_name: "Yehuda Katz"} ****/
使用map()方法:
function getNewArr() { return oldArr.map(function(item, index) { item.full_name = [item.first_name, item.last_name].join(" "); return item; }) } var personName = getNewArr(); personName.forEach(function(item, index) { console.log(item); }) /****输出结果: Object {first_name: "Colin", last_name: "Toh", full_name: "Colin Toh"} Object {first_name: "Addy", last_name: "Osmani", full_name: "Addy Osmani"} Object {first_name: "Yehuda", last_name: "Katz", full_name: "Yehuda Katz"} ****/
5、reduce()
reduce()可以实现一个累加器的功能,将数组的每个值(从左到右)将其降低到一个值。也可以理解为:让数组中的前项和后项做某种运算,并累积最终值;
场景: 统计一个数组中有多少个不重复的单词;
var arr = ["apple", "orange", "apple", "orange", "pear", "orange"]; function getWordCnt() { var obj = {}; for (var i = 0; i < arr.length; i++) { var item = arr[i]; obj[item] = (obj[item] + 1) || 1; } return obj; } console.log(getWordCnt()); // 输出结果: // Object {apple: 2, orange: 3, pear: 1}
使用reduce()后:
var arr = ["apple", "orange", "apple", "orange", "pear", "orange"]; function getWordCnt() { return arr.reduce(function(prev, next) { prev[next] = (prev[next] + 1) || 1; return prev; }, {}); } console.log(getWordCnt()); // 输出结果: // Object {apple: 2, orange: 3, pear: 1}
6 、array.some(callback[, thisObject]);callback : 函数用来测试某些元素。
thisObject: 对象作为该执行回调时使用。
检测数组中是否有某些项符合条件;
var scores = [45, 60, 70, 65, 95, 85]; var current = 60; function passed(score) { return score > current; } console.log(scores.some(passed)); // == > true
7、array.every(callback[, thisObject]);callback : 函数用来测试每个元素。thisObject: 对象作为该执行回调时使用。
检测数组中每一项是否符合条件;
var scores = [45, 60, 70, 65, 95, 85]; var current = 60; function passed(score) { return score > current; } console.log(scores.every(passed)); // == > false
通过以上实例给大家介绍了ECMAScript5中新增的Array方法,希望对大家有所帮助!
相关文章
Javascript实现Array和String互转换的方法
这篇文章主要介绍了Javascript实现Array和String互转换的方法,涉及JavaScript中toString方法与split方法的使用技巧,需要的朋友可以参考下...2015-12-24- 这篇文章主要介绍了javascript类型系统之Array对象,整理关于Array对象的学习笔记,感兴趣的小伙伴们可以参考一下...2016-01-12
- 下面小编就为大家带来一篇JavaScript:Array类型全面解析。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
- 这篇文章主要介绍了javascript 中关于array的常用方法的相关资料,需要的朋友可以参考下...2017-05-09
- 这篇文章主要介绍了详解JS中Array对象扩展与String对象扩展的相关资料,需要的朋友可以参考下...2016-01-08
- 本文给大家分享的是在使用PHP做开发的时候,比较容易忽视的2个小细节,分别是empty和in_array,有需要的小伙伴可以来参考下。...2016-02-05
- 这篇文章主要介绍了实例详解ECMAScript5中新增的Array方法的相关资料,需要的朋友可以参考下...2016-04-06
- 本文给大家总结了一下PHP实现数组字符串搜索的几种使用技巧,非常的简单实用,有需要的小伙伴可以参考下...2016-07-25
- 本文主要是给大家简单介绍了Array的相关基础知识,到这里也算是能对Array有更全面的理解了,希望大家能够喜欢,后续我们将继续介绍关于array的内容。...2016-03-15
- 下面小编就为大家带来一篇判断js的Array和Object的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
PHP 在数组中搜索给定的简单实例 array_search 函数
下面小编就为大家带来一篇PHP 在数组中搜索给定的简单实例 array_search 函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-06-24- php array_values 函数用于返回数组中所有的值,注意该函数将为新数组建立数组索引,原来的文字索引将不存在。本文章向大家讲解array_values函数的基本语法及使用实例,需要的朋友可以参考下...2016-11-22
- 相信大家都知道in_array函数是判断数据中是否存在指定的内容了,对于这个函数用法非常的简单,但在使用过程中会我发现有一些问题,下面我们就对于这些问题来看看如何处理吧.有需要的朋友们可以参考借鉴。...2016-09-18
- 在php教程中数组是种强大的数据类型,他可以做的事情很多,可以存储不同的数据类型在一个数组中,下面我们列出了数组常用的操作,排序,键名对数组排序等做法。...2016-07-25
- 这篇文章是Javascript数组Array系列文章的第二篇,主要给大家讲解的是javascript数组arrayd的所有方法,希望大家能够喜欢。...2016-03-15