实例详解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 相关文章推荐
jquery的attr方法禁用表单元素禁用输入内容
Jun 23 Javascript
js数组依据下标删除元素
Apr 14 Javascript
JavaScript里实用的原生API汇总
May 14 Javascript
jQuery实现的倒计时效果实例小结
Apr 16 Javascript
Boostrap入门准备之border box
May 09 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
Bootstrap缩略图的创建方法
Mar 22 Javascript
浅谈js中的this问题
Aug 31 Javascript
使用Vue写一个datepicker的示例
Jan 27 Javascript
Node.js模块全局安装路径配置方法
May 17 Javascript
vue.js通过路由实现经典的三栏布局实例代码
Jul 08 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
Feb 03 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
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
javascript dom追加内容实现示例
2013/09/21 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
javascript实现日期时间动态显示示例代码
2015/09/08 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
JS获取当前地理位置的方法
2017/10/25 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
koa-router源码学习小结
2018/09/07 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
Python实现的彩票机选器实例
2015/06/17 Python
Python中方法链的使用方法
2016/02/23 Python
如何通过Python实现标签云算法
2019/07/02 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
python给list排序的简单方法
2020/12/10 Python
Bose法国官网:购买耳机、扬声器、家庭影院、专业音响
2017/12/21 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
政法学院毕业生求职信
2014/02/28 职场文书
民事诉讼授权委托书范文
2014/08/02 职场文书
2014年服务员工作总结
2014/11/18 职场文书
党员剖析材料范文
2014/12/18 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL