如何在 JavaScript 中查找数组中的最小/最大元素

有多种方法可以找到 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