在 JavaScript 的编程世界里,数组就像是我们手中的得力工具,它能存储各种数据,帮我们解决各种复杂的问题。今天,就来跟大家深入聊聊 JavaScript 数组那些非常实用的方法,掌握了它们,你在编程时就能更加游刃有余!
some:找到一个 “符合条件” 的就行
含义
some方法的作用是检查数组中是否至少存在一个元素满足你设定的条件。这就好比你要在一群人中找到一个会弹吉他的人,只要找到一个,就完成任务啦!
参数
它接收一个回调函数作为参数,这个回调函数会依次作用于数组中的每一个元素。回调函数包含三个参数:当前处理的元素、当前元素的索引,以及原始数组。
是否修改数组
some方法不会对原数组进行任何修改,它仅仅是进行检查操作。
最佳实践
// 检查数组中是否存在大于的数
const numbers = [, , , ];
const hasGreaterThanFifteen = numbers.some((number) => number > );
console.log(hasGreaterThanFifteen); // true,因为和都大于
// 检查数组中是否有以 'm' 开头的字符串
const fruits = ['apple', 'mango', 'banana'];
const hasMangoLike = fruits.some((fruit) => fruit.startsWith('m'));
console.log(hasMangoLike); // true,因为有'mango'
every:每一个都得 “符合标准”
含义
every方法和some方法恰好相反,它会检查数组中的所有元素是否都满足指定的条件。这就像在选拔一支篮球队,要求每个队员都得具备特定的技能水平。
参数
同样接收一个回调函数,回调函数的参数和some方法的一样。
是否修改数组
every方法不会修改原数组,只是进行判断操作。
最佳实践
// 检查数组中所有数是否都小于
const numbers = [, , ];
const allLessThanTwenty = numbers.every((number) => number < );
console.log(allLessThanTwenty); // true,所有数都小于
// 检查数组中所有字符串是否都包含字母 'o'
const words = ['hello', 'world', 'good'];
const allContainO = words.every((word) => word.includes('o'));
console.log(allContainO); // true,所有单词都包含 'o'
at:精准定位元素
含义
at方法可以根据索引来获取数组中的元素,而且它支持负数索引,负数索引表示从数组末尾开始计数。这就好比你在书架上找书,既可以从前往后数找到你想要的书,也可以从后往前数找到它。
参数
接收一个索引值作为参数。
是否修改数组
at方法不会修改原数组,只是获取指定索引位置的元素。
最佳实践
const fruits = ['apple', 'banana', 'cherry', 'date'];
console.log(fruits.at(1)); // 'banana',获取索引为1的元素
console.log(fruits.at(-1)); // 'date',从末尾数第一个元素
of:快速创建数组
含义
of方法用于创建一个包含指定元素的新数组。它就像是一个快速组装玩具的工具,你把零件(元素)交给它,它就能帮你组装成一个完整的数组。
参数
可以接收任意数量的参数,这些参数就是要放入新数组的元素。
是否修改数组
of方法不涉及对已有数组的修改,它是创建一个全新的数组。
最佳实践
const newArray1 = Array.of(5, , );
console.log(newArray1); // [5, , ]
const newArray2 = Array.of('x', 'y', 'z');
console.log(newArray2); // ['x', 'y', 'z']
fill:填充数组
含义
fill方法可以用固定的值来填充数组,并且可以指定填充的起始位置和结束位置(不包含结束位置的元素)。想象你有一个空白的拼图(数组),你可以用一种颜色(值)把其中一部分或者全部填满。
参数
第一个参数是要填充的值,后面两个可选参数分别是起始索引和结束索引。
是否修改数组
fill方法会直接修改原数组。
最佳实践
let array = [1, 2, 3, 4, 5];
array.fill(0);
console.log(array); // [0, 0, 0, 0, 0],全部填充为0
array = [1, 2, 3, 4, 5];
array.fill(-1, 2, 4);
console.log(array); // [1, 2, -1, -1, 5],从索引2到索引4(不包括4)填充为-1
flat:摊平多维数组
含义
flat方法用于将多维数组 “摊平” 成为一维数组。比如你有一摞嵌套的盒子(多维数组),flat方法可以帮你把这些盒子一个个展开,平铺在地上(一维数组)。
参数
接收一个可选参数,表示展开的深度,默认值是 1。
是否修改数组
flat方法不会修改原数组,而是返回一个新的摊平后的数组。
最佳实践
const multiArray1 = [1, [2, 3], 4];
const flatArray1 = multiArray1.flat();
console.log(flatArray1); // [1, 2, 3, 4],默认展开一层
const multiArray2 = [1, [2, [3, 4]]];
const flatArray2 = multiArray2.flat(2);
console.log(flatArray2); // [1, 2, 3, 4],展开两层
flatMap:映射与摊平
含义
flatMap方法首先对数组中的每个元素执行一个映射函数,然后将执行结果 “摊平” 成一个新数组。这就好比你先把每个零件都加工成特定的样子,然后再把这些加工后的零件组装成一个新的整体。
参数
接收一个回调函数,该回调函数会对每个元素进行处理。
是否修改数组
flatMap方法不修改原数组,而是返回一个新数组。
最佳实践
const numbers = [1, 2, 3];
const result = numbers.flatMap((number) => [number * 2, number * 3]);
console.log(result); // [2, 3, 4, 6, 6, 9],先乘2和乘3,再摊平
const words = ['hello', 'world'];
const charArray = words.flatMap((word) => word.split(''));
console.log(charArray); // ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'],将单词拆分成字符再摊平
ES6 新增的其他数组方法
find:寻找符合条件的元素
含义
find方法用于找出数组中第一个满足测试条件的元素。假如你在一个装满各种物品的箱子里找特定的东西,find方法就能帮你快速找到第一个符合要求的物品。
参数
接收一个回调函数,回调函数的参数和some方法一致。
是否修改数组
find方法不会修改原数组,只会返回找到的元素,如果没找到则返回undefined。
最佳实践
const numbers = [, , , ];
const found = numbers.find((number) => number > );
console.log(found); //
findIndex:查找符合条件元素的索引
含义
findIndex方法和find方法类似,不过它返回的是第一个满足条件的元素的索引,而不是元素本身。这就好比你不仅要找到特定物品,还要知道它在箱子里的具体位置。
参数
接收一个回调函数,参数和find方法一样。
是否修改数组
findIndex方法不修改原数组,若未找到满足条件的元素,返回 -1。
最佳实践
const numbers = [5, , , ];
const index = numbers.findIndex((number) => number > );
console.log(index); // 2
includes:判断数组是否包含指定值
含义
includes方法用来判断一个数组是否包含指定的值,返回true或false。这就像检查你的购物清单里有没有某样商品。
参数
接收要查找的值作为第一个参数,第二个参数可选,表示从该索引位置开始查找。
是否修改数组
includes方法不会修改原数组。
最佳实践
const fruits = ['apple', 'banana', 'cherry'];
const hasBanana = fruits.includes('banana');
console.log(hasBanana); // true
keys:获取数组索引迭代器
含义
keys方法会返回一个包含数组中每个索引的迭代器。你可以把它想象成一串钥匙,每把钥匙对应数组里的一个位置。
参数
无。
是否修改数组
keys方法不修改原数组。
最佳实践
const fruits = ['apple', 'banana', 'cherry'];
const keys = fruits.keys();
for (let key of keys) {
console.log(key);
}
// 依次输出 0, 1, 2
values:获取数组值迭代器
含义
values方法返回一个包含数组中每个元素值的迭代器。就好像把数组里的每个值都拿出来,展示在你面前。
参数
无。
是否修改数组
values方法不修改原数组。
最佳实践
const numbers = [1, 2, 3];
const values = numbers.values();
for (let value of values) {
console.log(value);
}
// 依次输出 1, 2, 3
entries:获取数组索引和值的迭代器
含义
entries方法返回一个包含数组中每个索引和对应值的迭代器。它把索引和值对应起来展示,就像给每个物品都贴上了它在箱子里的位置标签。
参数
无。
是否修改数组
entries方法不修改原数组。
最佳实践
const fruits = ['apple', 'banana', 'cherry'];
const entries = fruits.entries();
for (let [index, value] of entries) {
console.log(index, value);
}
// 依次输出 0 'apple', 1 'banana', 2 'cherry'
熟练掌握这些 JavaScript 数组方法,能让你在处理数组相关的编程任务时更加高效。无论是日常开发,还是解决复杂的算法问题,它们都能成为你的得力助手!赶紧在实际项目中尝试运用这些方法吧!