实例详解ECMAScript5中新增的Array方法


Posted in Javascript onApril 05, 2016

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 相关文章推荐
JS 动态加载脚本的4种方法
May 05 Javascript
Mootools 1.2教程 函数
Sep 15 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
Apr 26 Javascript
jquery将一个表单序列化为一个对象的方法
Dec 02 Javascript
jquery序列化方法实例分析
Jun 10 Javascript
JQuery包裹DOM节点的方法
Jun 11 Javascript
javascript学习小结之prototype
Dec 03 Javascript
jquery中ajax跨域方法实例分析
Dec 18 Javascript
JS获取复选框的值,并传递到后台的实现方法
May 30 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
Nov 13 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
关于JS中的apply,call,bind的深入解析
Apr 05 #Javascript
javascript中apply、call和bind的使用区别
Apr 05 #Javascript
JavaScript数组去重的两种方法推荐
Apr 05 #Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 #Javascript
JS模拟简易滚动条效果代码(附demo源码)
Apr 05 #Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 #Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 #Javascript
You might like
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php实现对象克隆的方法
2015/06/20 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
关于php开启错误提示的总结
2019/09/24 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
jQuery 选择表格(table)里的行和列及改变简单样式
2012/12/15 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
2015/08/10 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
jquery对table做排序操作的实例演示
2017/08/10 jQuery
Angular异步变同步处理方法
2018/08/13 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
python使用win32com在百度空间插入html元素示例
2014/02/20 Python
python opencv之分水岭算法示例
2018/02/24 Python
Python json模块dumps、loads操作示例
2018/09/06 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
python字符串中匹配数字的正则表达式
2019/07/03 Python
python+selenium+chrome批量文件下载并自动创建文件夹实例
2020/04/27 Python
使用Python封装excel操作指南
2021/01/29 Python
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
what is the difference between ext2 and ext3
2015/08/25 面试题
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
管理提升方案
2014/06/04 职场文书
公司离职证明标准样本
2014/10/05 职场文书
Win11绿屏怎么办?Win11绿屏死机的解决方法
2021/11/21 数码科技