实例详解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的extend和fn.extend的使用说明
Jan 09 Javascript
有关javascript的性能优化 (repaint和reflow)
Apr 12 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
Jun 23 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
下雪了 javascript实现雪花飞舞
Aug 02 Javascript
全国省市二级联动下拉菜单 js版
May 10 Javascript
浅析Node.js:DNS模块的使用
Nov 23 Javascript
JavaScript中闭包的详解
Apr 01 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
Feb 23 Javascript
Vue源码解析之数组变异的实现
Dec 04 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
JavaScript中10个Reduce常用场景技巧
Jun 21 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使用百度ping服务代码实例
2014/06/19 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
js实现简单锁屏功能实例
2015/05/27 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
js实现分页功能
2017/05/24 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
python判断正负数方式
2020/06/03 Python
python中操作文件的模块的方法总结
2021/02/04 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
Ralph Lauren英国官方网站:Ralph Lauren UK
2018/04/03 全球购物
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
专科毕业生就业推荐信
2013/11/01 职场文书
职工趣味运动会方案
2014/02/10 职场文书
银行办公室岗位职责
2014/03/10 职场文书
综合内勤岗位职责
2014/04/14 职场文书
实习公司领导推荐函
2014/05/21 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android
MySQL主从切换的超详细步骤
2022/06/28 MySQL