2011-03-09 12 views
13

यहाँ का उपयोग किए बिना दो सरणियों जोड़े मैंconcat विधि

function test(r){ 
    var arr = ['d','e','f']; 
    r.push(arr); 
    /* 
    More Code 
    */ 
    return r; 
} 
var result = test(['a','b','c']); 
alert(result.length);//I want this to alert 6 

करने के लिए मैं क्या करने की जरूरत एक सरणी में गुजरती हैं और यह के अंत तक अन्य सारणियों देते हैं और फिर चाहते हैं क्या का एक नमूना है सरणी वापस करें। संदर्भ से गुजरने के कारण मैं array.concat(array2); का उपयोग नहीं कर सकता। तत्वों को एक-एक करके जोड़ने के लिए लूप के लिए कुछ उपयोग किए बिना ऐसा करने का कोई तरीका है। मैंने r.push(arr.join()); की तरह कुछ करने की कोशिश की लेकिन यह भी काम नहीं किया। इसके अलावा, मुझे एरे में ऑब्जेक्ट्स रखने का विकल्प चाहिए, इसलिए वास्तव में r.push(arr.join()); बहुत अच्छी तरह से काम नहीं करता है।

उत्तर

44
>>> var x = [1, 2, 3], y = [4, 5, 6]; 
>>> x.push.apply(x, y) // or Array.prototype.push.apply(x, y) 
>>> x 
[1, 2, 3, 4, 5, 6] 

वैकल्पिक रूप से destructuring का उपयोग कर आप अब इस

//generate a new array 
a=[...x,...y]; 
//or modify one of the original arrays 
x.push(...y); 
+0

'apply' के दिलचस्प उपयोग emulbreh के पास जाना चाहिए +1 – meouw

+0

मैं देखा था पहले लागू विधि, लेकिन वास्तव में यह कभी नहीं समझा (स्वयं की जरूरत के लिए ध्यान दें आवेदन पर अध्ययन करने के लिए), लेकिन यह निश्चित रूप से जो मैं चाहता था उसे करने का एक संक्षिप्त तरीका बनाता है। हालांकि पहली विधि से दूसरी विधि कैसे भिन्न होती है? X.push.apply के बजाय Array.prototype का उपयोग करना। – qw3n

+0

दोनों समकक्ष हैं। कॉलिंग 'x.push (y)' का अर्थ है "फंक्शन 'x.push' को स्कोप' x' और तर्क' [y] 'के साथ कॉल करें। इस मामले में 'x.push'' Array.prototype.push 'को हल करता है , इस प्रकार: 'Array.prototype.push.apply (x, [y])'। मैंने केवल दूसरे रूप का उल्लेख किया है क्योंकि यह कभी-कभी संदर्भ 'x' को संदर्भित करने के लिए बेहतर होता है। – emulbreh

2
function test(r){ 
    var _r = r.slice(0), // copy to new array reference 
     arr = ['d','e','f']; 

    _r = _r.concat(arr); // can use concat now 

    return _r; 
} 
var result = test(['a','b','c']); 
alert(result.length); // 6 
+3

गलत, आपके द्वारा लौटाई गई सरणी संशोधित सरणी नहीं है जो समारोह में पारित किया गया था, यह एक प्रति है – meouw

0

यह है emulbreh's answer, मैं सिर्फ परीक्षण मैं इसे सत्यापित करने के लिए किया था पोस्टिंग कर रहा हूँ कर सकते हैं। सभी क्रेडिट एक और सरणी पर एक सरणी के सभी सदस्यों को पुश करने के लिए

// original array 
var r = ['a','b','c']; 

function test(r){ 
    var arr = ['d','e','f']; 
    r.push.apply(r, arr); 

    /* 
    More Code 
    */ 
    return r; 
} 
var result = test(r); 
console.log(r); // ["a", "b", "c", "d", "e", "f"] 
console.log(result === r); // the returned array IS the original array but modified 
संबंधित मुद्दे