ECMAScript5 给出了一系列新的API接口,这些接口在新的浏览器中大部分是被支持的,IE9,Chrome,FirFor都支持,也有少量API不是所有浏览器都支持,以下内容仅介绍大部分被支持的API。利用新的API我们可以设计出非常靠谱的类,而且还能保持原有的javaScript的风格。
ECMAScript5标准发布于2009年12月3日,它带来了一些新的,改善现有的Array数组操作的方法。(注意兼容性)
在ES5中,一共有9个Array方法:
rush:js;">
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。
rush:js;">
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() 时:
rush:js;">
var arr=[{"name":"apple","count": 2},{"name":"orange","count": 5},{"name":"pear","count": 3},"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():
rush:js;">
var newArr = arr.filter(function(item) {
return item.name === "orange";
});
console.log("Filter results:",newArr);
3、forEach()
forEach为每个元素执行对应的方法,是用来替换for循环的。
rush:js;">
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()对数组的每个元素进行一定操作(映射)后,会返回一个新的数组。
rush:js;">
var oldArr = [{f
irst_name: "Colin",last_name: "Toh"},{f
irst_name: "Addy",last_name: "Osmani"},{f
irst_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.f
irst_name,item.last_name].join(" ");
newArr[i] = item;
}
return newArr;
}
var personName = getNewArr();
personName.forEach(function(item,index) {
console.log(item);
})
/****
输出结果:
Object {f
irst_name: "Colin",last_name: "Toh",full_name: "Colin Toh"}
Object {f
irst_name: "Addy",last_name: "Osmani",full_name: "Addy Osmani"}
Object {f
irst_name: "Yehuda",last_name: "Katz",full_name: "Yehuda Katz"}
****/
使用map()方法:
rush:js;">
function getNewArr() {
return oldArr.map(function(item,index) {
item.full_name = [item.f
irst_name,item.last_name].join(" ");
return item;
})
}
var personName = getNewArr();
personName.forEach(function(item,full_name: "Yehuda Katz"}
****/
5、reduce()
reduce()可以实现一个累加器的功能,将数组的每个值(从左到右)将其降低到一个值。也可以理解为:让数组中的前项和后项做某种运算,并累积最终值;
场景: 统计一个数组中有多少个不重复的单词;
rush:js;">
var arr = ["apple","orange","apple","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()后:
rush:js;">
var arr = ["apple","orange"];
function getWordCnt() {
return arr.reduce(function(prev,next) {
prev[next] = (prev[next] + 1) || 1;
return prev;
},{});
}
console.log(getWordCnt());
//
输出结果:
// Object {apple: 2,pear: 1}
6 、array.some(callback[,thisObject]);callback : 函数用来测试某些元素。
thisObject: 对象作为该执行回调时使用。
检测数组中是否有某些项符合条件;
current;
}
console.log(
scores
.some(passed)); // == > true
7、array.every(callback[,thisObject]);callback : 函数用来测试每个元素。thisObject: 对象作为该执行回调时使用。
检测数组中每一项是否符合条件;
current;
}
console.log(
scores.every(passed)); // == > false
通过以上实例给大家介绍了ECMAScript5中新增的Array方法,希望对大家有所帮助!
原文地址:https://www.jb51.cc/js/49404.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。