apply提高数组找出最大最小值的方式(性能)
来源:互联网 发布:身份证人脸比对知乎 编辑:程序博客网 时间:2024/05/17 06:53
apply()
方法调用一个函数, 其具有一个指定的this
值,以及作为一个数组(或类似数组的对象)提供的参数。
使用apply
和内置函数
聪明的apply用法允许你在某些本来需要写成遍历数组变量的任务中使用内建的函数。在接下里的例子中我们会使用Math.max/Math.min来找出一个数组中的最大/最小值。
/* min/max number in an array */var numbers = [5, 6, 2, 3, 7];/* using Math.min/Math.max apply */var max = Math.max.apply(null, numbers); /* This about equal to Math.max(numbers[0], ...) or Math.max(5, 6, ..) */var min = Math.min.apply(null, numbers);/* vs. simple loop based algorithm */max = -Infinity, min = +Infinity;for (var i = 0; i < numbers.length; i++) { if (numbers[i] > max) max = numbers[i]; if (numbers[i] < min) min = numbers[i];}
但是当心:如果用上面的方式调用
当你对一个方法传入非常多的参数 (比如超过1W多个参数) 时, 就非常有可能会导致越界问题, 这个临界值是根据不同的 JavaScript 引擎而定的 (JavaScript 核心中已经做了硬编码 参数个数限制在65536),因为这个限制(实际上也是任何用到超大栈空间的行为的自然表现)是未指定的. 有些引擎会抛出异常. 更糟糕的是其他引擎会直接限制传入到方法的参数个数,导致参数丢失. (举个例子: 如果某个引擎限制了方法参数最多为4个 [实际真正的参数个数限制当然要高得多了, 这里只是打个比方], 上面的代码中, 真正通过 apply
, 你很可能会遇到方法参数个数越界的问题. apply
传到目标方法中的参数为 5, 6, 2, 3, 而不是完整的 numbers 数组.) 如果你的参数数组可能非常大, 那么推荐使用下面这种策略来处理: 将参数数组切块后循环传入目标方法:
function minOfArray(arr) { var min = Infinity; var QUANTUM = 32768; for (var i = 0, len = arr.length; i < len; i += QUANTUM) { var submin = Math.min.apply(null, arr.slice(i, Math.min(i + QUANTUM, len))); min = Math.min(submin, min); } return min;}var min = minOfArray([5, 6, 2, 3, 7]);
阅读全文
0 0
- apply提高数组找出最大最小值的方式(性能)
- java__for找出数组中最大,最小值
- 数组进阶找出最大或最小值
- 找出出列表的最大最小值
- 二维数组的最大最小值
- 数组的练习 ----最大最小值
- 求数组的最大最小值
- 找出整型数组中最大和最小值及其所在位置
- 同时找出数组的最大值和最小值
- 循环数组-找出最小值
- 算法提高 最大最小值
- 3.创建一个20个大小的随机数组,找出这组数组的最大值和最小值, 并且标出最大数和最小值的位置
- 用 Function.apply() 的参数数组化来提高 JavaScript程序性能
- 一个很容易被坑的点(找出最大最小值并交换)
- 如何利用call,apply获取数组的最大值最小值
- 分治求数组的最大最小值
- 分治法求数组的最大最小值
- JavaScript求数组元素的最大/最小值
- nanomsg框架简介
- jquery-ui sortable详解
- 【Scikit-Learn 中文文档】二十一:聚类
- 从源码了解handler looper ,messageQueue思路
- Python实现trie进行机械分词
- apply提高数组找出最大最小值的方式(性能)
- java防止xss脚本注入攻击,采用spring工具类方式
- 功能测试框架
- HDU 5976 Detachment
- 蓝桥杯 算法训练 友好数
- [DL]基于Pytorch的Linear classified model
- Java 中的调试
- JAVA必背面试题和项目面试通关要点
- 智能家居标准ZHA