有多种方法可以找到 JavaScript 数组中的最小和最大数字,这些方法的性能因数组中元素的数量而异。
让我们分别讨论它们,并在最后给出测试结果。
Math.max()
对于常规数组,我们可以使用带有三个点的 Math.max:
let max = Math.max(...arrayOfNumbers);
例子:
let arrayOfNumbers = [4, 12, 62, 70, -10]; console.log(Math.max(...arrayOfNumbers)); //returns 70
使用三个点 (...) 可以轻松调用任何需要参数的函数。
reduce()
我们还可以使用 reduce() 方法获取项目数:
testArr.reduce(function (a, b) {
return Math.max(a, b);
});
testArr.reduce(function (a, b) {
return Math.min(a, b);
});
例子:
let arrayList = [1, 2, 3, 4, 3, 20, 0];
let maxNum = arrayList.reduce((prev, current) => {
return Math.max(prev, current)
});
console.log(maxNum);
扩展运算符
扩展运算符也用于获取数组的最大值。
它将数字数组扩展为参数列表,例如 Math.min() 和 Math.max() :
Math.min(...testArr); Math.max(...testArr); Math.min.apply(Math, testArr); Math.max.apply(Math, testArr);
数组的最大大小
JavaScript数组最多允许多少个元素?
apply 和 spread 方法有 65536 的限制,这来自最大参数数量的限制。
2019年,限制值是调用堆栈的最大大小,这意味着在应用和扩展解决方案的情况下,数字的最大大小约为120000。以下脚本将计算特定环境的限制:
let testArr = Array.from({
length: 10000
}, () => Math.floor(Math.random() * 2000000));
for (i = 10000; i < 1000000; ++i) {
testArr.push(Math.floor(Math.random() * 2000000));
try {
Math.max.apply(null, testArr);
} catch (e) {
console.log(i);
break;
}
}
当我们测试上述所有给定示例时,结果表明标准循环是最快的。
然后是 apply 和 spread 方法,在它们之后是 reduce,这是最慢的a)
当处理超过 40 个元素的大型数组时,与其他方法相比,扩展运算符被认为是更糟糕的选择。
apply()
Math.max 函数使用 apply() 方法查找数值数组中的最大元素:
Math.min.apply(Math, testArr); Math.max.apply(Math, testArr);
例子:
let arrayOfNumbers = [4, 12, 62, 70, -10]; console.log(Math.max.apply(Math, arrayOfNumbers)); //returns 70
标准循环
我们可以对大量参数使用标准循环,因为 for 循环没有大小限制:
let max = testArray[0];
for (let i = 1; i < testArrayLength; ++i) {
if (testArray[i] > max) {
max = testArray[i];
}
}
let min = testArray[0];
for (let i = 1; i < testArrayLength; ++i) {
if (testArray[i] < min) {
min = testArray[i];
}
}
例子:
let arrayList = [1, 2, 3, 4, 3, 21, 0];
let max = arrayList[0];
for (let i = 1; i < arrayList.length; ++i) {
if (arrayList[i] > max) {
max = arrayList[i];
}
}
console.log(max);
日期:2020-06-02 22:16:18 来源:oir作者:oir
