ECMAScript 5 新增 Array 方法详解与实战
本文详细介绍 ECMAScript 5 标准中引入的七个核心 Array 方法:indexOf、filter、forEach、map、reduce、some 和 every。通过对比传统循环与新增 API 的代码示例,解析各方法的参数、返回值及适用场景,帮助开发者提升代码简洁性与执行效率。
ECMAScript 5 Array 新方法概述
ECMAScript 5 标准定义了一系列新的 API 接口,这些接口在较新的浏览器环境中得到了广泛支持,包括 IE9、Chrome 和 Firefox 等主流浏览器。尽管并非所有 API 都能在所有浏览器中运行,但本文重点介绍那些被广泛支持的实用接口。借助这些新特性,开发者能够构建出更加健壮且符合原有 JavaScript 编程风格的代码库。
ECMAScript 5 标准于 2009 年 12 月 3 日正式发布,其中包含了一些旨在改进现有数组操作的新方法。需要注意的是,在实际应用中必须充分考虑浏览器的兼容性问题。
在 ECMAScript 5 规范中,总共定义了 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"}
****/
reduce 方法的高级应用
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}
some 与 every 条件检测
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方法,希望对大家有所帮助!
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
