दिलचस्प पोस्ट
इकाई फ़्रेमवर्क के साथ मैन्युअल रूप से कुंजी दर्ज करना कुछ अच्छे एनएटी प्रोफाइलर्स क्या हैं? Photos.app से अंतिम चित्र प्राप्त करें? एक व्यवस्थापक के रूप में एफबी डीबी को REST अनुरोध करने के लिए कस्टम टोकन का उपयोग करना क्या यह मेमोकैश में PHP सत्रों को संग्रहीत करने की सिफारिश की है? ब्राउजर को इसे खोलने के बजाय पीडीएफ दस्तावेज़ डाउनलोड करने के लिए मजबूर करें फ़ंक्शन पैरामीटर का कोई परिभाषित प्रकार int के लिए डिफ़ॉल्ट नहीं है? क्या मैं पागल हूं? बाहरी ऑथ प्रदाता के साथ MVC5 फ्रेमवर्क OAuth / OWin पहचान प्रदाता से ExtraData प्राप्त करें फायरबेज श्रोता में सिंगलटन संपत्ति मान सेट करना क्लाइंट-साइड जावास्क्रिप्ट में बेस 64 एन्कोडिंग और डीकोडिंग क्लोज़र में प्रतीक और वार्स के बीच का अंतर जावा 8 नए दिनांक और समय एपीआई के लिए जेपीए समर्थन एक सार सिंटैक्स ट्री और कंक्रीट सिंटैक्स ट्री के बीच अंतर क्या है? ऐप का विकल्प नवीनतम आईट्यून्स 12.7 से हटा दिया गया है …, एडहॉक आईपीए कैसे स्थापित करें? दृश्य स्टूडियो 2012 अंतिम आरसी में इंटेलिसेंस और कोड सुझाव काम नहीं कर रहा है

जावास्क्रिप्ट धक्का सरणी मानों को एक और सरणी में

मेरे पास एक जावास्क्रिप्ट सरणी dataArray जो कि मैं एक नया सरणी के नए एरे में पुश करना चाहता newArray । सिवाय मैं newArray[0] को newArray[0] नहीं करना चाहता। मैं सभी मानों को नए सरणी में डालना चाहता हूं:

 var newArray = []; newArray.pushValues(dataArray1); newArray.pushValues(dataArray2); // ... 

या इससे भी बेहतर:

 var newArray = new Array ( dataArray1.values(), dataArray2.values(), // ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself ); 

तो अब नई सरणी में व्यक्तिगत डेटा एरे के सभी मान हैं। क्या इस तरह के कुछ pushValues जैसे pushValues उपलब्ध हैं, इसलिए मुझे प्रत्येक व्यक्तिगत pushValues नहीं पड़ता है, 1 से 1 मान जोड़ना?

Solutions Collecting From Web of "जावास्क्रिप्ट धक्का सरणी मानों को एक और सरणी में"

Concat फ़ंक्शन का उपयोग करें, जैसे:

 var arrayA = [1, 2]; var arrayB = [3, 4]; var newArray = arrayA.concat(arrayB); 

newArray का मान [1, 2, 3, 4] ( arrayA और arrayB अपरिवर्तित रहता है; arrayB बनाता है और परिणाम के लिए एक नया सरणी देता है)।

बशर्ते आपका सरणियां विशाल नहीं हैं (नीचे चेतावनी देखें), आप सरणी के push() विधि का उपयोग कर सकते हैं, जिसमें आप मूल्य जोड़ना चाहते हैं। push() कई मापदंडों को ले सकता है ताकि आप फ़ंक्शन मापदंडों की सूची के रूप में धक्का जाने वाले मूल्यों की सरणी को पारित करने के लिए इसका apply() विधि का उपयोग कर सकते हैं। यह एक नया सरणी बनाने के बजाय ऐरे में तत्वों को जोड़ने के concat() का उपयोग करने पर लाभ है

हालांकि, ऐसा लगता है कि बड़े सरणियों (100,000 सदस्यों या अधिक के आदेश) के लिए, यह चाल विफल हो सकती है । ऐसे सरणियों के लिए, एक लूप का उपयोग करना एक बेहतर तरीका है विवरण के लिए https://stackoverflow.com/a/17368101/96100 देखें

 var newArray = []; newArray.push.apply(newArray, dataArray1); newArray.push.apply(newArray, dataArray2); 

आप इसे फ़ंक्शन में सामान्य बनाना चाहते हैं:

 function pushArray(arr, arr2) { arr.push.apply(arr, arr2); } 

… या Array के प्रोटोटाइप में जोड़ें:

 Array.prototype.pushArray = function(arr) { this.push.apply(this, arr); }; var newArray = []; newArray.pushArray(dataArray1); newArray.pushArray(dataArray2); 

… या वास्तविक push() पद्धति का अनुकरण करके कई मापदंडों को इस तथ्य का उपयोग करके अनुमति दें कि concat() , जैसे push() , कई मापदंडों की अनुमति देता है:

 Array.prototype.pushArray = function() { this.push.apply(this, this.concat.apply([], arguments)); }; var newArray = []; newArray.pushArray(dataArray1, dataArray2); 

यहां पिछले उदाहरण का एक लूप-आधारित संस्करण है, जिसमें बड़े सरणियों और सभी प्रमुख ब्राउज़रों के लिए उपयुक्त है, जिसमें आईई <= 8:

 Array.prototype.pushArray = function() { var toPush = this.concat.apply([], arguments); for (var i = 0, len = toPush.length; i < len; ++i) { this.push(toPush[i]); } }; 

मैं एक और "भविष्य-सबूत" उत्तर जोड़ूंगा

ECMAScript 6 में, आप फैल ऑपरेटर का उपयोग कर सकते हैं:

 var arr1 = [0, 1, 2]; var arr2 = [3, 4, 5]; arr1.push(...arr2); 

स्प्रेड ऑपरेटर अभी तक सभी प्रमुख ब्राउज़रों में शामिल नहीं है। वर्तमान संगतता के लिए, यह (लगातार अद्यतन) संगतता तालिका देखें ।

हालांकि, आप Babel.js के साथ प्रसार ऑपरेटर का उपयोग कर सकते हैं।

एमडीएन से एक शानदार तरीका मिला

 var vegetables = ['parsnip', 'potato']; var moreVegs = ['celery', 'beetroot']; // Merge the second array into the first one // Equivalent to vegetables.push('celery', 'beetroot'); Array.prototype.push.apply(vegetables, moreVegs); console.log(vegetables); // ['parsnip', 'potato', 'celery', 'beetroot'] 

या आप ES6 की spread operator सुविधा का उपयोग कर सकते हैं:

 let fruits = [ 'apple', 'banana']; const moreFruits = [ 'orange', 'plum' ]; fruits.push(...moreFruits); // ["apple", "banana", "orange", "plum"] 
 var a=new Array('a','b','c'); var b=new Array('d','e','f'); var d=new Array('x','y','z'); var c=a.concat(b,d) 

क्या यह आपकी समस्या को हल करता है?

ऐरे के बारे में बहुत सारे जवाब हैं। प्रोटोटाइप । यहाँ एक स्पष्ट उदाहरण है:

 var dataArray1 = [1, 2]; var dataArray2 = [3, 4, 5]; var newArray = [ ]; Array.prototype.push.apply(newArray, dataArray1); // newArray = [1, 2] Array.prototype.push.apply(newArray, dataArray2); // newArray = [1, 2, 3, 4, 5] console.log(JSON.stringify(newArray)); // Outputs: [1, 2, 3, 4, 5] 

निम्नलिखित मुझे सरल लगता है:

 var newArray = dataArray1.slice(); newArray.push.apply(newArray, dataArray2); 

जैसा कि "पुश" तर्कों की एक चर संख्या लेता है, आप किसी दूसरे सरणी के सभी तत्वों को पुश करने के लिए push समारोह की विधि apply कर सकते हैं। यह अपनी पहली तर्क ("नयाअरे" यहां) के रूप में "यह" और शेष तर्कों के रूप में सरणी के तत्वों का उपयोग करके पुश करने के लिए कॉल का निर्माण करता है।

पहले बयान में slice पहली सरणी की एक प्रति प्राप्त करता है, इसलिए आप इसे संशोधित नहीं करते हैं।

जावास्क्रिप्ट ईएस 6 के साथ, आप … ऑपरेटर को एक फैल ऑपरेटर के रूप में इस्तेमाल कर सकते हैं जो सरणी को मूल्यों में परिवर्तित कर देगा। फिर, आप ऐसा कुछ कर सकते हैं:

 var myArray = [1,2,3,4,5]; var moreData = [6,7,8,9,10]; myArray = [ ...myArray, ...moreData, ]; 

जबकि सिंटैक्स संक्षिप्त है, मुझे नहीं पता कि यह आंतरिक रूप से कैसे काम करता है और बड़े ऑरेंज पर प्रदर्शन प्रभाव क्या होता है।

नीचे दिए गए फ़ंक्शन में एरे की लंबाई के साथ कोई समस्या नहीं है और सभी सुझाए गए समाधानों से बेहतर प्रदर्शन करता है:

 function pushArray(list, other) { var len = other.length; var start = list.length; list.length = start + len; for (var i = 0; i < len; i++ , start++) { list[start] = other[i]; } } 

दुर्भाग्य से, जेस्परीफ मेरी प्रस्तुतियाँ स्वीकार करने से इनकार करते हैं, इसलिए यहां वे बेंचमार्क। जेएस का उपयोग करते हुए परिणाम हैं

  Name | ops/sec | ± % | runs sampled for loop and push | 177506 | 0.92 | 63 Push Apply | 234280 | 0.77 | 66 spread operator | 259725 | 0.40 | 67 set length and for loop | 284223 | 0.41 | 66 

कहा पे

लूप और पुश के लिए है:

  for (var i = 0, l = source.length; i < l; i++) { target.push(source[i]); } 

पुश लागू करें:

 target.push.apply(target, source); 

फैल ऑपरेटर:

  target.push(...source); 

और अंत में 'सेट लंबाई और फॉर पाश' उपर्युक्त कार्य है

हमारे पास दो सरणी हैं ए और बी। कोड जो यहां दिया गया है वह सरणी है, मान को सरणी बी में धकेल दिया जाता है।

 let a = [2, 4, 6, 8, 9, 15] function transform(a) { let b = ['4', '16', '64'] a.forEach(function(e) { b.push(e.toString()); }); return b; } transform(a) [ '4', '16', '64', '2', '4', '6', '8', '9', '15' ] 

यह एक कार्यशील कोड है और यह ठीक काम करता है:

 var els = document.getElementsByTagName('input'), i; var invnum = new Array(); var k = els.length; for(i = 0; i < k; i++){invnum.push(new Array(els[i].id,els[i].value))} 

इसके बजाय पुश () फ़ंक्शन का उपयोग आईईए के लिए कंसैट फ़ंक्शन का उपयोग करें। उदाहरण,

 var a=a.concat(a,new Array('amin')); 

सबसे सरल:

 var newArray = dataArray1.slice(0);