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

时间:2013-02-01 16:51:02

标签: javascript jquery

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

2 个答案:

答案 0 :(得分:10)

这句话是正确的,两个函数实际上并没有做同样的事情,一个将两个数组合并为一个(第一个参数),第二个从两个数组合建一个新数组。

它所指的“足迹”是随时使用的最大内存量。由于merge,只是复制第二个数组,它应该使用更少的内存,因为在任何时候,它只需要在内存中有2个数组。

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

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

  • 合并需要1000 + 1000 [a-> c],以及1000 [b]或3000个点。
  • Concat需要1000 + 1000 [c]和1000 [a]以及1000 [b]或4000个点。

如果使用大量内存,可以更快地减少内存,减少移动也可以更快。

Some tests I found

答案 1 :(得分:1)

在tmaster的情况下,他使用jQuery.merge()来合并2个数组。实际上,JQuery.merge可以用来合并jQuery Object(jQuery Object也有长度prop)和Array.Here是jQuery.merge()的代码:

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;
},

因此,对于JQuery对象具有length属性,它可以使用merge将第二个JQuery Object attr(如0,1)复制到第一个JQuery对象。这是一个例子:

    pushStack: function( elems ) {

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

    ...

    return ret;
},

this.constructor()返回一个jQuery对象,也是elems。但concat不能,那只能用于Array.This也是concat和JQuery.merge之间的差异。