更好的实现js数组连接,用到的知识apply.

最近做的万达的一个能源管理平台中用到了数据连接,当时想都没想直接写了一个a.concat(b)。今天在掘金看到了一个优化的方案。是这样:a.push.apply(a,b);其中a,b分别为两个数组。仔细一想才知道,原来concat方法会创建一个新的数组,并且循环a,b两个数组,然后返回这个新的数组。这样就不会改变a,b数组的值了。但是同样的创建一个新的数组同样会有些性能方面的问题,即使很小,很小。但是作为一个代码洁癖者,总想着要把他优化到自己的极限。

  然后,重点到了。我们来搞搞apply吧。这才是重中之重,授人以鱼不如授人以渔。只有学到了基础才能举一反三。学apply,主要参考的就是js的mdn了。自认为这个讲的不错的,有例子,有兼容性讲解,有参数说明。最主要的还是中文的,很方便,有没有?

  一般研究问题我喜欢从三个方面入手,what,why,how,那么开始吧!

  what:简洁的说改变当前方法的this对象并且传入一个数组参数,并且让这个方法执行。我们就拿上边的例子来说明一下吧。a.push.apply(a,b);这个语句说明的就是push方法执行之前,我们把push方法的this改变为a,并且传入了b这个参数。注意,b这个参数是一个数组。apply会把b中的值一个个取出来然后作为push方法的参数。因此相当于

数组a一个个push数组b中的每一项。因此最后的a数组的值就是 合并后的值了。这样会改变数组a的值。如果有需求的话可以在执行这个之前把数组a用另外的变量存起来。

  why:用处多多,不一一说明了,仅仅把mdn上简单的列举一个,以下代码的功能是求出数组中的最大最小值。

/* 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];
}讲了这么多:how?应该可以简单使用了吧!最后再啰嗦一句吧,call和apply的用法基本一样,唯一的不同之处就是call中参数不是数组了,而是一个个参数,相当于把数组一项项分开列出来而已。
时间: 2024-10-25 20:45:00

更好的实现js数组连接,用到的知识apply.的相关文章

js中数组连接concat()

数组连接concat() concat() 方法用于连接两个或多个数组.此方法返回一个新数组,不改变原来的数组. 语法 arrayObject.concat(array1,array2,...,arrayN) 参数说明: 我们创建一个数组,将把 concat() 中的参数连接到数组 myarr 中,代码如下: <script type="text/javascript"> var mya = new Array(3); mya[0] = "1"; mya

js数组的操作

转载 js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学!呵呵.学了之后才知道,js数组的功能强大很,远比VB,C#强多了,大家慢慢看吧 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限

js数组的操作。好难,自己学习下。

js数组的操作 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度 var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); //创建一个数组并赋值 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可

js 的数组怎么push一个对象. Js数组的操作push,pop,shift,unshift JavaScript使用push方法添加一个元素到数组末 JavaScript数组函数unshift、shift、pop、push使用

push()函数用于向当前数组的添加一个或多个元素,并返回新的数组长度.新的元素将会依次添加到数组的末尾. 该函数属于Array对象,所有主流浏览器均支持该函数. 语法 array.push( item1 [,items... ] )参数 参数 描述item1 任意类型添加到当前数组末尾处的元素.items 可选参数/任意类型要添加到当前数组末尾处的其他项,可以有多个.注意:如果添加的元素类型为数组类型(Array),仍然会被当作一个元素看待,只是这个元素是数组类型而已.如果要合并两个数组,请使

js数组的操作及数组与字符串的相互转化

数组与字符串的相互转化 <script type="text/javascript">var obj="new1abcdefg".replace(/(.)(?=[^$])/g,"$1,").split(",");       //字符串转化为数组 var obj2 = "new2abcdefg".split("");                              

js数组的操作 Full

js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵呵.学了之后才知道,js数组的功能强大很,远比VB,C#强多了,大家慢慢看吧 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度

【转载】js数组的操作

js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵呵.学了之后才知道,js数组的功能强大很,远比VB,C#强多了,大家慢慢看吧 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度

js 数组操作大集合

js数组的操作 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多,自以为js高手的自己居然无从下手,一下狠心,我学!呵呵.学了之后才知道,js数组的功能强大很,远比VB,C#强多了,大家慢慢看吧 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度

js数组对象以及数组常用属性和方法

定义形式: var  arr1 = new Array(1,  5,  8,  7,  2,  10);  //定义了一个数组,其中具有6个数据 var  arr2 = new Array();                   //只是单纯地定义了一个数组(名),但没有给值(数据),即现在是空的 var  arr3 = [1,  5,  8,  7,  2,  10];  //同arr1,只是一种简写的定义法. var  arr4 = [ ];                  //同arr