jQuery.merge()和JavaScript本机函数concat()有什么区别?

jQuery.merge()和JavaScript本机函数concat()有什么区别?,javascript,jquery,Javascript,Jquery,我想把两个数组连接成一个数组。我发现有两个功能可以完成这项工作;一个是jQuery.merge(),另一个是JavaScript内置函数concat()。他们似乎做了同样的事情,我发现。它说:“Merge创建了一个更小的占用空间,因为它在原始数组中循环并添加新项。Concat是一个内置Javascript函数,应该更快,但占用空间更大。”我不确定这句话是否属实,还有其他区别吗?引用是正确的,这两个函数实际上做的事情并不相同,一个函数将两个数组合并到一个数组中(第一个参数),第二个函数从这两个数组

我想把两个数组连接成一个数组。我发现有两个功能可以完成这项工作;一个是
jQuery.merge()
,另一个是JavaScript内置函数
concat()
。他们似乎做了同样的事情,我发现。它说:“Merge创建了一个更小的占用空间,因为它在原始数组中循环并添加新项。Concat是一个内置Javascript函数,应该更快,但占用空间更大。”我不确定这句话是否属实,还有其他区别吗?

引用是正确的,这两个函数实际上做的事情并不相同,一个函数将两个数组合并到一个数组中(第一个参数),第二个函数从这两个数组中构建一个新数组

它所指的“footprint”是任何时候都将使用的最大内存量。因为merge只会复制第二个数组,所以它应该使用更少的内存,因为在任何时候,它只需要在内存中有两个数组

内置函数需要有3个数组,新数组的大小必须与连接的两个数组的大小相同

假设阵列A和B中有1000个元素,合并后的阵列为C:

  • 合并需要1000+1000[a->c]和1000[b]或3000个点
  • Concat需要1000+1000[c]和1000[a]和1000[b]或4000个点
如果使用了大量内存,内存越少速度越快,移动越少速度也越快


在tmaster的情况下,他使用jQuery.merge()合并2个数组。实际上,jQuery.merge可以用于将jQuery对象(jQuery对象也有长度属性)与数组合并。以下是jQuery.merge()的代码:


构造函数()也返回jQuery对象。但是concat不能,它只能用于数组。这也是concat和JQuery.merge之间的区别。

一个区别是$.merge()函数具有破坏性。它修改第一个参数以添加第二个参数中的项。concat()没有。它生成一个新数组。
merge: function( first, second ) {
    var len = +second.length,
        j = 0,
        i = first.length;

    for ( ; j < len; j++ ) {
        first[ i++ ] = second[ j ];
    }

    first.length = i;

    return first;
},
    pushStack: function( elems ) {

    // Build a new jQuery matched element set
    var ret = jQuery.merge( this.constructor(), elems );

    ...

    return ret;
},