है वहाँ रास्ते में बनाया दूसरे में इतना की तरह एक सूची संलग्न करने के लिए एक:जावास्क्रिप्ट: एक पूरी सूची दबाएं?
var a = [1,2,3];
a.append([4,5]);
// now a is [1,2,3,4,5];
concat()
कुछ ऐसा ही है, लेकिन परिणाम देता है। मैं कुछ इस तरह push()
है वहाँ रास्ते में बनाया दूसरे में इतना की तरह एक सूची संलग्न करने के लिए एक:जावास्क्रिप्ट: एक पूरी सूची दबाएं?
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])
मुझे लगता है कि 'Array.prototype.push.apply' होना चाहिए, मुझे लगता है। – lonesomeday
@lonesomeday: आपको सही लगता है। 'a.push.apply' भी काम करेगा। मैं स्पष्ट रूप से अंतर विभाजित। – outis
क्या आप * कैसे * यह काम करता है पर थोड़ा और विस्तार कर सकते हैं? – KooiInc
कैसे इस बारे में मौजूदा सूची को संशोधित करता हैं:
var a = [1, 2, 3];
a = a.concat([4, 5]);
// a is now [1, 2, 3, 4, 5]
var list = [1, 2];
लोगों को आप पहले से ही दिखाया है कि कैसे के साथ ऐसा करना:
list.push.apply(list, [3, 4]);
list = list.concat([4, 5]);
लेकिन मैं ES6 spread operator के बारे में बताना चाहता हूँ: list.push(...[3, 4]);
।
ध्यान रखें कि वर्तमान में कई ब्राउज़र इसका समर्थन नहीं करते हैं (आप ट्रांसलेटर का उपयोग कर सकते हैं)।
मुझे पता चला कि, यदि आपकी सरणी बहुत बड़ी है और आप केवल 5-20 तत्व डालते हैं, तो 'list.push.apply' विधि बहुत तेज है। – Aloso
@Aloso धन्यवाद, आप इसे एक संबंधित बेंचमार्क के साथ उत्तर के रूप में पोस्ट कर सकते हैं ("बेहद तेज़" और "बहुत बड़ा" –
के पीछे की संख्या देखना अच्छा लगेगा, मुझे नहीं लगता कि यह एक संपूर्ण उत्तर के योग्य है। हालांकि , मैंने परीक्षण की गति के लिए एक jsperf बनाया: https://jsperf.com/array-vs-linkedlist-concat – Aloso
आप ES6 उपयोग कर रहे हैं आप प्रसार ऑपरेटर का उपयोग कर सकते
जैसे: -
listOne = [1,2,3]
listTwo = [4,5,6]
listTwo.push(...listOne)
क्योंकि मैं तो बस एक वेब अनुप्रयोग जहां सरणियों का एक बहुत श्रेणीबद्ध किया जाना है और प्रदर्शन के लिए महत्वपूर्ण है, जहां लिखा था , मैंने परीक्षण किया कि कौन सी विधि सबसे तेज in this jsperf है। परिणाम काफी दिलचस्प हैं।
मेरे परीक्षण में, मैं 10,000 तत्वों की सूची या सरणी में 10 तत्व जोड़ता हूं।
यहां परीक्षण मामले हैं, सबसे तेज़ से धीमे तक।परिणाम क्रोम 62 में मापा जाता है, बल्कि Firefox 47 प्रदर्शन इसी तरह:
LinkedList.prototype.concat
: 90,313,485 ऑप्स/सेकंड
list.concat(concatList);
// This function has to change only 1-2 refences
एक में पाश के लिए Array.prototype.push
: 3,794,962 ऑप्स/सेकंड
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 ऑप्स/सेकंड
array.push.apply(array, concatArr);
Array.prototype.concat
: 22,701 ऑप्स/सेकंड
array = array.concat(concatArr);
दुर्भाग्य से, LinkedList
संस्करण यदि आप कईLinkedList
रों को एक सरणी/सूची concat करना चाहते हैं काम नहीं करता। प्रत्येक कॉन्सट ऑपरेशन से पहले LinkedList
पर किसी सरणी को कॉपी करने की आवश्यकता होने पर इसका कोई फायदा नहीं होता है। तो, मेरे लिए, विजेता लूप के लिए विजेता है।
का एक कारण Array.prototype.push.apply
का उपयोग नहीं करता है कि यह संक्रमित सरणी बहुत बड़ी है तो यह विफल हो जाती है। this answer के अनुसार, समेकित सरणी में फ़ायरफ़ॉक्स में 500,000 से अधिक तत्व और क्रोम में 150,000 तत्व नहीं हो सकते हैं।
मैंने spread operator को बाहर रखा क्योंकि यह सभी ब्राउज़रों द्वारा समर्थित नहीं है। क्रोम में, यह Array.prototype.push.apply
जितना तेज़ है, फ़ायरफ़ॉक्स में यह थोड़ा धीमा है।
[जावास्क्रिप्ट पुश सरणी मानों को किसी अन्य सरणी में संभावित डुप्लिकेट] (http://stackoverflow.com/questions/4156101/javascript-push-array-values-into-another-array), ["फ्लैट कैसे करें "जावास्क्रिप्ट में धक्का"] (http://stackoverflow.com/questions/4007744/how-to-do-a-flat-push-in-javascript) – outis