簡體   English   中英

Javascript:推送整個列表?

[英]Javascript: push an entire list?

是否有內置的方法將一個列表附加到另一個列表中,如下所示:

var a = [1,2,3];
a.append([4,5]);
// now a is [1,2,3,4,5];

concat()執行類似的操作但返回結果。 我想要一些修改現有列表的東西,比如push()

push會起作用,但你也需要使用apply

var a = [1,2,3];
a.push.apply(a, [4,5])
var list = [1, 2];

人們已經告訴你如何做到這一點:

  1. push: list.push.apply(list, [3, 4]);
  2. concat: list = list.concat([4, 5]);

但我想講講ES6傳播運算符list.push(...[3, 4]);

請記住,目前沒有多少瀏覽器支持它(您可以使用轉發器)。

如果您使用的是ES6,則可以使用擴展運算符

例如: -

listOne = [1,2,3]
listTwo = [4,5,6]
listTwo.push(...listOne)

這個怎么樣:

var a = [1, 2, 3];
a = a.concat([4, 5]);
// a is now [1, 2, 3, 4, 5]

因為我剛剛編寫了一個Web應用程序,其中許多數組必須連接在一起並且性能至關重要,所以我在這個jsperf中測試了哪種方法最快。 結果非常有趣。

在我的測試中,我將10個元素添加到10,000個元素的列表或數組中。

以下是測試用例,從最快到最慢。 結果在Chrome 62中測量,但Firefox 47的表現相似:

  • LinkedList.prototype.concat :90,313,485 ops / sec

     list.concat(concatList); // This function has to change only 1-2 refences 
  • for循環中的 Array.prototype.push :3,794,962 ops / sec

     for (var i = 0, len = concatArr.length; i < len; i++) { array.push(concatArr[i]); } // Probably fastest in real life 
  • Array.prototype.push.apply :2,193,469 ops / sec

     array.push.apply(array, concatArr); 
  • Array.prototype.concat :22,701 ops / sec

     array = array.concat(concatArr); 

不幸的是,如果要將數組/列表連接到多個 LinkedList ,則LinkedList版本不起作用。 如果必須在每個concat操作之前將數組復制到LinkedList ,那么它也沒有任何好處。 所以,對我來說,贏家是for循環

不使用Array.prototype.push.apply一個原因是,如果連接數組太大,它將失敗。 根據這個答案 ,連鎖數組在Firefox中不能超過500,000個元素,在Chrome中不能包含150,000個元素。

我排除了傳播運營商,因為並非所有瀏覽器都支持它。 在Chrome中,它與Array.prototype.push.apply一樣快,在Firefox中它有點慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM