第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在不創(chuàng)建新數(shù)組的情況下用另一個數(shù)組擴展現(xiàn)有的JavaScript數(shù)組

如何在不創(chuàng)建新數(shù)組的情況下用另一個數(shù)組擴展現(xiàn)有的JavaScript數(shù)組

翻閱古今 2019-07-08 15:07:49
如何在不創(chuàng)建新數(shù)組的情況下用另一個數(shù)組擴展現(xiàn)有的JavaScript數(shù)組似乎沒有一種方法可以用另一個數(shù)組擴展現(xiàn)有的JavaScript數(shù)組,即模擬Python的extend方法。我要做到以下幾點:>>> a = [1, 2][1, 2]>>> b = [3, 4, 5][3, 4, 5]>>> SOMETHING HERE>>> a[1, 2, 3, 4, 5]我知道有一個a.concat(b)方法,但是它創(chuàng)建一個新數(shù)組,而不是簡單地擴展第一個數(shù)組。我想要一種高效的算法a明顯大于b(即不復制的a).注:這是不是復制品如何將某物附加到數(shù)組中?-此處的目標是將一個數(shù)組的全部內(nèi)容添加到另一個數(shù)組中,然后“就位”,即不復制擴展數(shù)組的所有元素。
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經(jīng)驗 獲得超8個贊

這個.push方法可以使用多個參數(shù)。您可以使用擴展算子將第二個數(shù)組的所有元素作為參數(shù)傳遞給.push:

>>> a.push(...b)

如果瀏覽器不支持ECMAScript 6,則可以使用.apply相反:

>>> a.push.apply(a, b)

或者,如果你覺得更清楚的話:

>>> Array.prototype.push.apply(a,b)

請注意,如果數(shù)組出現(xiàn)堆棧溢出錯誤,所有這些解決方案都將失敗。b太長了(根據(jù)瀏覽器的不同,大約有10萬個元素開始出現(xiàn)問題)。如果你不能保證b很短,您應該使用另一個答案中描述的基于循環(huán)的標準技術。


查看完整回答
反對 回復 2019-07-08
?
郎朗坤

TA貢獻1921條經(jīng)驗 獲得超9個贊

更好的答案是我的新答案a.push(...b)..不要再投這個票了,因為它從來沒有真正回答過這個問題,但這是一次2015年的黑客攻擊,圍繞著谷歌的第一次攻擊:)


對于那些簡單地搜索“JavaScript數(shù)組擴展”并來到這里的人,您可以很好地使用Array.concat.

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

CONAT將返回一個新數(shù)組的副本,這是線程啟動程序不想要的。但你可能不在乎(當然,對于大多數(shù)的用途,這都會很好)。


也有一些不錯的ECMAScript 6糖用于這個形式的擴展操作符:

const a = [1, 2, 3];const b = [...a, 5, 4, 3];

(它也是復制的。)


查看完整回答
反對 回復 2019-07-08
?
慕沐林林

TA貢獻2016條經(jīng)驗 獲得超9個贊

你應該使用基于循環(huán)的技術。此頁面上基于以下方法的其他答案:.apply對于大型數(shù)組,可能會失敗。

一個相當簡潔的基于循環(huán)的實現(xiàn)是:

Array.prototype.extend = function (other_array) {
    /* You should include a test to check whether other_array really is an array */
    other_array.forEach(function(v) {this.push(v)}, this);}

然后,您可以執(zhí)行以下操作:

var a = [1,2,3];var b = [5,4,3];a.extend(b);

DzinX的回答(使用push.application)和其他.apply當我們所附加的數(shù)組很大時,基于方法就會失敗(測試表明,對我來說,Chrome中的>15萬個條目,F(xiàn)irefox中的>500萬個條目)。您可以看到這個錯誤發(fā)生在這個jsperf.

當調用‘Function.Prototype.Apply’時,會出現(xiàn)錯誤,因為調用堆棧的大小超過了‘Function.Prototype.Apply’,而第二個參數(shù)(MDN有一個關于使用功能.原型.應用-見題為“應用和內(nèi)置功能”的一節(jié))。

若要與此頁上的其他答案進行速度比較,請查看這個jsperf(感謝EaterOfCode)?;谘h(huán)的實現(xiàn)在速度上與使用Array.push.apply,但往往比Array.slice.apply.

有趣的是,如果所附加的數(shù)組是稀疏的,則forEach基于以上的方法可以充分利用稀疏性,優(yōu)于傳統(tǒng)的方法。.apply基于方法這個jsperf如果你想自己測試的話。

順便說一句,不要被誘惑(就像我一樣!)進一步縮短forEach實現(xiàn)如下:

Array.prototype.extend = function (array) {
    array.forEach(this.push, this);}

因為這會產(chǎn)生垃圾結果!為什么?因為Array.prototype.forEach為它調用的函數(shù)提供三個參數(shù)-它們是:(元素_值、元素_索引、源_數(shù)組)。的每一次迭代,所有這些都將被推入到第一個數(shù)組中。forEach如果你用“forEach(這個,推,這個)”!


查看完整回答
反對 回復 2019-07-08
  • 3 回答
  • 0 關注
  • 401 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號