数组求和:比较 JavaScript 中的递归、for 循环和 ES6 方法
javascriptweb developmentobject oriented programming更新于 2025/10/22 0:44:17
假设我们有一个包含大量数字条目的数组,需要比较递归所用的时间、简单循环所用的时间以及 ES6 函数对数组的所有条目求和所用的时间,即递归、for 循环和 ES6 函数。
在这里,为了模拟一个大数组,我们将在一个相对较小的数组上进行大量迭代(数量级为 10000000)。我们的主要目的只是粗略地了解每个方法对数组求和所用时间的比例。
第 1 部分:递归方法
const recursiveSum = (arr, len = 0, sum = 0) => {
if(len < arr.length){
return recursiveSum(arr, len+1, sum + arr[len]);
};
return sum;
};
第 2 部分:循环方法
const loopingSum = arr => {
let sum = 0;
for(let i = 0; i < arr.length; i++){
sum += arr[i];
};
return sum;
};
第 3 部分:ES6 方法
const ES6Sum = arr => arr.reduce((acc, val) => acc+val);
现在让我们借助控制台方法 time() 和 timeEnd() 来比较这三个函数的性能 −
示例
const ITERATIONS = 100000000;
const arr = [12, 65, 87, 2, 23, 87, 4, 66, 34, 89, 89, 32, 4];
const recursiveSum = (arr, len = 0, sum = 0) => {
if(len < arr.length){
return recursiveSum(arr, len+1, sum + arr[len]);
};
return sum;
};
const loopingSum = arr => {
let sum = 0;
for(let i = 0; i < arr.length; i++){
sum += arr[i];
};
return sum;
};
const ES6Sum = arr => arr.reduce((acc, val) => acc+val);
console.time('recursive approach');
for(let k = 0; k < ITERATIONS; k++){
recursiveSum(arr);
};
console.timeEnd('recursive approach');
console.time('looping approach');
for(let l = 0; l < ITERATIONS; l++){
loopingSum(arr);
};
console.timeEnd('looping approach');
console.time('ES6 approach');
for(let m = 0; m < ITERATIONS; m++){
loopingSum(arr);
};
console.timeEnd('ES6 approach');
现在让我们看一下可能的控制台输出 −
注意 − 这只是可能的控制台输出,因为任何代码的性能都在很大程度上取决于系统。但这三个函数所花费的时间比率在所有系统中大致相同。
递归方法:13.774s 循环方法:3.138s ES6 方法:2.493s
因此,在这里我们可以在特定机器上看到三种方法进行大量迭代所花费的时间。这表明,对于数组上的较小和基本计算,ES6 函数比任何其他方法都更高效、性能更高。
注意 − 为了获得更好的结果,请避免在在线 IDE 中测试此代码。
相关文章
有用资源
javascript 参考教程 - 该教程包含有关 javascript 的更多信息:https://www.cainiaomax.com/javascript/

