本篇延续 JavaScript 数组方法系列文章,继续探讨常用数组方法的底层实现原理。如果您是第一次阅读本系列,建议先阅读第一部分。本文将通过
循环模拟实现
、
、
、
和
方法,帮助您更深入地理解这些方法的工作机制。
和
这两个方法分别用于返回一组数字中的最小值和最大值。它们既可以接收单个数字作为参数,也可以通过扩展运算符 (
) 处理数组。以下是一些示例:
正如您所见,
和
方法显著简化了代码,降低了出错的概率。
`.reverse()`
此方法用于反转数组元素的顺序。需要注意的是,
方法会直接修改原始数组。
立即学习
“
Java免费学习笔记(深入)
”;
同样,数组方法的效率更高,代码更简洁,出错的可能性更小。
`.filter()`
方法用于返回数组中满足指定条件的元素组成的新的数组。
假设我们有一组银行账户,每个账户都有一个
属性,我们需要返回余额为零的账户。
使用
方法使代码更简洁易读,并且减少了错误的可能性。
`.reduce()`
方法对数组的每个元素执行一个回调函数,并将结果累积到一个最终值。
一个简单的例子是使用
计算数组所有元素的和。我们还可以用它来计算一组数字的平均值:
虽然在这个例子中,
并不会节省很多代码,但它仍然降低了出错的概率。
本文通过几个例子展示了如何使用
循环模拟一些常用的 JavaScript 数组方法。JavaScript 数组方法种类繁多,本文仅涵盖部分常用方法。如果您希望了解其他数组方法的实现原理,请在评论区留言。 欢迎提出您的宝贵意见和建议,并分享本文给需要的朋友。
如果您想阅读第一部分,请访问
此处
。
感谢您的阅读!
最初发表于 2023 年 2 月 13 日
forMath.max()Math.min().reverse().filter().reduce()Math.min()Math.max()...// 查找数组中的最小值:
// 使用 for 循环:
function findMinValueInArray(array) {
let min = array[0];
for (let i = 1; i < array.length; i++) {
if (array[i] < min) {
min = array[i];
}
}
return min;
}
findMinValueInArray([33, -5544, 66, 55]); // 返回:-5544
// 使用 Math.min():
function findMinValueInArray(array) {
return Math.min(...array);
}
findMinValueInArray([33, -5544, 66, 55]); // 返回:-5544
// 查找数组中的最大值:
// 使用 for 循环:
function findMaxValueInArray(array) {
let max = array[0];
for (let i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
return max;
}
findMaxValueInArray([33, -5544, 66, 55]); // 返回:66
// 使用 Math.max():
function findMaxValueInArray(array) {
return Math.max(...array);
}
findMaxValueInArray([33, -5544, 66, 55]); // 返回:66Math.min()Math.max().reverse()// 反转数组元素的顺序
// 使用 for 循环:
function reverseArray(array) {
let reversedArray = [];
for (let i = array.length - 1; i >= 0; i--) {
reversedArray.push(array[i]);
}
return reversedArray;
}
reverseArray([1, 2, 3, 4, 5]); // 返回:[5, 4, 3, 2, 1]
// 使用 .reverse():
function reverseArray(array) {
return array.reverse();
}
reverseArray([1, 2, 3, 4, 5]); // 返回:[5, 4, 3, 2, 1].filter()balance// 使用 for 循环:
function getClientsWithNoMoney(array) {
let accountsWithZeroBalance = [];
for (let account of array) {
if (account.balance === 0) {
accountsWithZeroBalance.push(account);
}
}
return accountsWithZeroBalance;
}
// 使用 .filter():
function getClientsWithNoMoney(array) {
return array.filter((account) => account.balance === 0);
}.filter().reduce().reduce()// 使用 for 循环:
function getAverage(array) {
let sum = 0;
for (let i = 0; i < array.length; i++) {
sum += array[i];
}
return sum / array.length;
}
getAverage([10, 20, 30, 40]); // 返回:25
// 使用 .reduce():
function getAverage(array) {
return array.reduce((cv, acc) => cv + acc, 0) / array.length;
}
getAverage([10, 20, 30, 40]); // 返回:25.reduce()for