实例详解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 判断元素上是否绑定了事件
Oct 28 Javascript
JavaScript 设计模式之组合模式解析
Apr 09 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
js实现创建删除html元素小结
Sep 30 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
Jun 21 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 Javascript
vue下拉菜单组件(含搜索)的实现代码
Nov 25 Javascript
详解Vue之父子组件传值
Apr 01 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
echarts饼图各个板块之间的空隙如何实现
Dec 01 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 array操作10个小技巧分享
2011/06/23 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
Jquery Validation插件防止重复提交表单的解决方法
2010/03/05 Javascript
jquery搜索框效果实现方法
2015/01/16 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
Angular如何由模板生成DOM树的方法
2019/12/23 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
JavaScript DOM常用操作代码汇总
2020/07/03 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
django实现模型字段动态choice的操作
2020/04/01 Python
没编程基础可以学python吗
2020/06/17 Python
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
优纳科技软件测试面试题
2012/05/15 面试题
申报职称专业技术个人的自我评价
2013/12/12 职场文书
《太阳》教学反思
2014/02/21 职场文书
《曹刿论战》教学反思
2014/03/02 职场文书
团队经理竞聘书
2014/03/31 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
表扬信范文
2019/04/22 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android