实例详解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判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
Dec 20 Javascript
jQuery中index()方法用法实例
Dec 27 Javascript
Node.js巧妙实现Web应用代码热更新
Oct 22 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
Jun 12 Javascript
在vue2.0中引用element-ui组件库的方法
Jun 21 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
Jan 15 Javascript
webpack自动打包和热更新的实现方法
Jun 24 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
Jun 01 Javascript
vant 解决tab切换插件标题样式自定义的问题
Nov 13 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字符串中的单引号为双引号的方法
2017/02/16 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
JS作为值的函数用法示例
2016/06/20 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
Python异步操作MySQL示例【使用aiomysql】
2019/05/16 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
Python基础之列表常见操作经典实例详解
2020/02/26 Python
python实现飞机大战项目
2020/03/11 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
精选奢华:THE LIST
2019/09/05 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
六月份红领巾广播稿
2014/02/03 职场文书
小学安全教育材料
2014/02/17 职场文书
买卖协议书范本
2014/04/21 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
心灵点滴观后感
2015/06/02 职场文书
导游词之山东八大关
2019/12/18 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
十大冰系宝可梦排名,颜值最高的阿罗拉九尾,第三使用率第一
2022/03/18 日漫
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS