实例详解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函数的第二个参数获取指定上下文中的DOM元素
May 19 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
Sep 09 Javascript
node.js中的fs.rmdir方法使用说明
Dec 16 Javascript
jQuery的观察者模式详解
Dec 22 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
Nov 10 Javascript
快速入门Vue
Dec 19 Javascript
Canvas实现放射线动画效果
Feb 15 Javascript
easyui-datagrid特殊字符不能显示的处理方法
Apr 12 Javascript
Vue.js项目部署到服务器的详细步骤
Jul 17 Javascript
详解vue中引入stylus及报错解决方法
Sep 22 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
Nov 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面向对象法则
2012/02/23 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
统计出现最多的字符次数的js代码
2010/12/03 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
浅析python的优势和不足之处
2018/11/20 Python
python实现连续图文识别
2018/12/18 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python使用Pygame绘制时钟
2020/11/29 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
自主招生自荐信格式
2013/12/03 职场文书
关于毕业的广播稿
2014/01/10 职场文书
薪酬专员岗位职责
2014/02/18 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
Nginx安装完成没有生成sbin目录的解决方法
2021/03/31 Servers
JUnit5常用注解的使用
2021/07/02 Java/Android