数组迭代方法对每个数组项进行操作。
这个forEach()
方法为每个数组元素调用一次函数(回调函数)。
const numbers = [45, 4, 9, 16, 25];
let txt = "";
numbers.forEach(myFunction);
function myFunction(value, index, array) {
txt += value + "<br>";
}
亲自试一试 »
请注意,该函数有 3 个参数:
上面的示例仅使用 value 参数。该示例可以重写为:
const numbers = [45, 4, 9, 16, 25];
let txt = "";
numbers.forEach(myFunction);
function myFunction(value) {
txt += value + "<br>";
}
亲自试一试 »
这个map()
方法通过对每个数组元素执行函数来创建一个新数组。
这个map()
方法不会对没有值的数组元素执行该函数。
这个map()
方法不会改变原始数组。
此示例将每个数组值乘以 2:
const numbers1 = [45, 4, 9, 16, 25];
const numbers2 = numbers1.map(myFunction);
function myFunction(value, index, array) {
return value * 2;
}
亲自试一试 »
请注意,该函数有 3 个参数:
当回调函数仅使用 value 参数时,索引和数组参数可以省略:
const numbers1 = [45, 4, 9, 16, 25];
const numbers2 = numbers1.map(myFunction);
function myFunction(value) {
return value * 2;
}
亲自试一试 »
ES2019添加了数组flatMap()
JavaScript 方法。
这个flatMap()
方法首先映射数组的所有元素,然后通过展平数组来创建一个新数组。
JavaScript 数组flatMap()
自 2020 年 1 月起所有现代浏览器均支持:
Chrome 69 | Edge 79 | Firefox 62 | Safari 12 | Opera 56 |
Sep 2018 | Jan 2020 | Sep 2018 | Sep 2018 | Sep 2018 |
这个filter()
方法创建一个新数组,其中包含通过测试的数组元素。
此示例根据值大于 18 的元素创建一个新数组:
const numbers = [45, 4, 9, 16, 25];
const over18 = numbers.filter(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
在上面的例子中,回调函数没有使用索引和数组参数,因此可以省略它们:
const numbers = [45, 4, 9, 16, 25];
const over18 = numbers.filter(myFunction);
function myFunction(value) {
return value > 18;
}
亲自试一试 »
这个reduce()
方法在每个数组元素上运行一个函数以生成(将其减少为)单个值。
这个reduce()
方法在数组中从左到右工作。也可以看看reduceRight()
。
这个reduce()
方法不会减少原始数组。
此示例查找数组中所有数字的总和:
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction);
function myFunction(total, value, index, array) {
return total + value;
}
亲自试一试 »
请注意,该函数有 4 个参数:
上面的示例没有使用索引和数组参数。可以将其重写为:
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction);
function myFunction(total, value) {
return total + value;
}
亲自试一试 »
这个reduce()
方法可以接受一个初始值:
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduce(myFunction, 100);
function myFunction(total, value) {
return total + value;
}
亲自试一试 »
这个reduceRight()
方法在每个数组元素上运行一个函数以生成(将其减少为)单个值。
这个reduceRight()
在数组中从右到左工作。也可以看看reduce()
。
这个reduceRight()
方法不会减少原始数组。
此示例查找数组中所有数字的总和:
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduceRight(myFunction);
function myFunction(total, value, index, array) {
return total + value;
}
亲自试一试 »
请注意,该函数有 4 个参数:
上面的示例没有使用索引和数组参数。可以将其重写为:
const numbers = [45, 4, 9, 16, 25];
let sum = numbers.reduceRight(myFunction);
function myFunction(total, value) {
return total + value;
}
亲自试一试 »
这个every()
方法检查所有数组值是否通过测试。
此示例检查所有数组值是否大于 18:
const numbers = [45, 4, 9, 16, 25];
let allOver18 = numbers.every(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
当回调函数仅使用第一个参数(值)时,其他参数可以省略:
const numbers = [45, 4, 9, 16, 25];
let allOver18 = numbers.every(myFunction);
function myFunction(value) {
return value > 18;
}
亲自试一试 »
这个some()
方法检查某些数组值是否通过测试。
此示例检查某些数组值是否大于 18:
const numbers = [45, 4, 9, 16, 25];
let someOver18 = numbers.some(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
这个indexOf()
方法在数组中搜索元素值并返回其位置。
笔记:第一项的位置为 0,第二项的位置为 1,依此类推。
在数组中搜索项目 "Apple":
const fruits = ["Apple", "Orange", "Apple", "Mango"];
let position = fruits.indexOf("Apple") + 1;
亲自试一试 »
array.indexOf(
item,
start)
item | Required. The item to search for. |
start | Optional. Where to start the search. Negative values will start at the given position counting from the end, and search to the end. |
Array.indexOf()
如果未找到该项目,则返回 -1。
如果该项目出现多次,则返回第一次出现的位置。
Array.lastIndexOf()
是相同的Array.indexOf()
,但返回指定元素最后一次出现的位置。
在数组中搜索项目 "Apple":
const fruits = ["Apple", "Orange", "Apple", "Mango"];
let position = fruits.lastIndexOf("Apple") + 1;
亲自试一试 »
array.lastIndexOf(
item,
start)
item | Required. The item to search for |
start | Optional. Where to start the search. Negative values will start at the given position counting from the end, and search to the beginning |
这个find()
方法返回通过测试函数的第一个数组元素的值。
此示例查找(返回其值)第一个大于 18 的元素:
const numbers = [4, 9, 16, 25, 29];
let first = numbers.find(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
find()
是一个ES6 特性(JavaScript 2015)。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
find()
Internet Explorer 不支持。
这个findIndex()
方法返回通过测试函数的第一个数组元素的索引。
此示例查找第一个大于 18 的元素的索引:
const numbers = [4, 9, 16, 25, 29];
let first = numbers.findIndex(myFunction);
function myFunction(value, index, array) {
return value > 18;
}
亲自试一试 »
请注意,该函数有 3 个参数:
findIndex()
是一个ES6 特性(JavaScript 2015)。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
findIndex()
Internet Explorer 不支持。
这个Array.from()
方法从任何具有 length 属性的对象或任何可迭代对象返回一个 Array 对象。
from()
是一个ES6 特性(JavaScript 2015)。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
from()
Internet Explorer 不支持。
这个Array.keys()
方法返回一个带有数组键的数组迭代器对象。
创建一个数组迭代器对象,包含数组的键:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const keys = fruits.keys();
for (let x of keys) {
text += x + "<br>";
}
亲自试一试 »
keys()
是一个ES6 特性(JavaScript 2015)。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
keys()
Internet Explorer 不支持。
创建一个数组迭代器,然后迭代键/值对:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
const f = fruits.entries();
for (let x of f) {
document.getElementById("demo").innerHTML += x;
}
亲自试一试 »
这个entries()
方法返回一个带有键/值对的数组迭代器对象:
[0,"Banana"]
[1,"Orange"]
[2,"Apple"]
[3,"Mango"]
这个entries()
方法不会改变原始数组。
entries()
是一个ES6 特性(JavaScript 2015)。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
entries()
Internet Explorer 不支持。
ECMAScript 2016 推出Array.includes()
到数组。这允许我们检查数组中是否存在元素(包括 NaN,与 indexOf 不同)。
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.includes("Mango"); // is true
亲自试一试 »
array.includes(
search-item)
Array.includes() 允许检查 NaN 值。与 Array.indexOf() 不同。
includes()
是一个ECMAScript 2016特征。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
includes()
Internet Explorer 不支持。
... 运算符将可迭代对象(如数组)扩展为更多元素:
const q1 = ["Jan", "Feb", "Mar"];
const q2 = ["Apr", "May", "Jun"];
const q3 = ["Jul", "Aug", "Sep"];
const q4 = ["Oct", "Nov", "May"];
const year = [...q1, ...q2, ...q3, ...q4];
亲自试一试 »
...
是一个ES6 特性(JavaScript 2015)。
所有现代浏览器都支持它:
Chrome | Edge | Firefox | Safari | Opera |
Yes | Yes | Yes | Yes | Yes |
...
Internet Explorer 不支持。