【问题标题】:JavaScript: min & max values in very big array?JavaScript:非常大的数组中的最小值和最大值?
【发布时间】:2017-01-10 07:48:23
【问题描述】:

如何从一个非常大的 JavaScript 数组(例如 25 万个数字)中轻松获取最小值和最大值?

我试过用这个方法,但是不行:JavaScript: min & max Array values?

我在 VisualStudio 中调试时没有收到任何错误,而在浏览器中我得到“超出最大调用堆栈大小”。

示例代码:

var max = Math.max.apply(-Infinity, arr);
var min = Math.min.apply(Infinity, arr);

“arr”是我非常大的数组。

【问题讨论】:

  • 首先,apply 的第一个参数是上下文。它应该是nullthis。其次,您始终可以返回自定义 for 循环。这是最安全的选择
  • 你的代码有什么问题?在我的 chrome 中工作。
  • 对我来说代码也可以,你用的是什么浏览器?
  • 我试过用null、this或Math,效果总是一样的。
  • @PAPP - 我认为值得一提的是您使用的浏览器,以便其他人有机会复制您的问题。

标签: javascript arrays minmax


【解决方案1】:

对我来说很好用

var min = Math.min.apply(Math, array);
var max = Math.max.apply(Math, array);

【讨论】:

  • 我试过用null、this或Math,效果总是一样的。您确定您尝试在我描述的这么大的阵列上使用它吗?因为此代码适用于较小的表(我尝试使用 65K 元素)。
  • 我没有尝试过大型数组,让我检查一次@PAPP
  • 当您需要以 150-300 K 的顺序传递参数时,不能保证不会因浏览器会话而导致堆栈溢出。 Math.min()Math.max()做不了大数组
【解决方案2】:

对于提到大小的大型数组,您不能安全地使用Math.min()Math.max()。我认为应该这样做。

var arr = new Array(1000000).fill().map(_=> ~~(Math.random()*10000000)),
findMax = a => a.reduce((res,cur) => res < cur ? cur : res ,-Infinity);
console.log(findMax(arr));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-02
    • 2017-02-13
    • 2012-02-11
    • 2016-06-21
    • 2016-09-10
    相关资源
    最近更新 更多