2013-02-05 22 views
16

मैं प्रयास कर रहा हूँ निम्नलिखित:जावास्क्रिप्ट में Array.splice को सरणी के रूप में तीसरे पैरामीटर के साथ उपयोग करने का कोई तरीका है?

var a1 = ['a', 'e', 'f']; // [a, e, f] 
var a2 = ['b', 'c', 'd']; // [b, c, d] 
a1.splice(1, 0, a2);  // expected [a, b, c, d, e, f] 
          // actual (a, [b, c, d], e, f] 

मैं अपने उपयोग के मामले में a2 होने से ही सीमित रहा indeterminant आकार की एक सरणी के रूप में मौजूद हैं। क्या किसी को प्रतिस्थापन के रूप में सरणी को एक सरणी को खिलाने के तरीके के बारे में पता है, या वैकल्पिक रूप से ऐसा करने के लिए अंतर्निहित फ़ंक्शन? मुझे पता है कि मैं ए 2 के तत्वों पर पुनरावृत्ति कर सकता हूं और एक बार में उन्हें एक में विभाजित कर सकता हूं, लेकिन मैं सबसे तेज़ तरीका संभवतः पसंद करूंगा क्योंकि मुझे इसे बहुत कुछ करने की आवश्यकता होगी।

उत्तर

30

Array.splice पहले दो के बाद कई तर्कों का समर्थन करता है। उन तर्कों को सभी सरणी में जोड़ा जाएगा। यह जानकर, आप तर्क सूची के रूप में सरणी को पास करने के लिए Function.apply का उपयोग कर सकते हैं।

var a1 = ['a', 'e', 'f']; 
var a2 = ['b', 'c', 'd']; 

// You need to append `[1,0]` so that the 1st 2 arguments to splice are sent 
Array.prototype.splice.apply(a1, [1,0].concat(a2)); 
+0

बिल्कुल सही, धन्यवाद। – CoryG

+0

आपका स्वागत है! :-) –

+0

वास्तव में चिकना है। बस मुझे क्या चाहिए, धन्यवाद! – 1252748

1

इस प्रयास करें:

var params = a2.slice(0); 
params.unshift(1,0); 
a1.splice.apply(a1,params); 

अधिकतर सामान्य मामले में:

Array.prototype.splice_multi = function(offset,todelete,insert) { 
    var params = insert.slice(0); 
    params.unshift(offset,todelete); 
    return this.splice.apply(this,params); 
}; 
a1.splice_multi(1,0,a2); 
+0

क्या आपको 'splice.apply' में 2 तर्क पारित करने की आवश्यकता नहीं है? –

+0

मैं वास्तव में करता हूं। मेरी गलती। –

3
var a1 = ['a', 'e', 'f'], 
    a2 = ['b', 'c', 'd']; 

a1.splice(1, 0, a2); 

var flatten = [].concat.apply([], a1); // ["a", "b", "c", "d", "e", "f"] 
2

इस चाल करना चाहिए।

var a1 = ['a', 'e', 'f']; 
var a2 = ['b', 'c', 'd']; 

a1.concat(a2, a1.splice(1,a1.length-1)) // [a, b, c, d, e, f] 
0
Array.prototype.splice.apply([1,2,3], [2, 0].concat([4,5,6])); 
0
private moveElements(source: Array<any>, target: Array<any>) { 
    target.push(...source); 
    source.splice(0, source.length); 
    //or 
    [].push.apply(target,source); 
    source.splice(0, source.length); 
} 
+0

कृपया उत्तर में कुछ स्पष्टीकरण जोड़ें। – Sampada

0
ES6 साथ

, आप spread ऑपरेटर का उपयोग कर सकते हैं। यह इसे और अधिक संक्षिप्त और पठनीय बनाता है।

var a1 = ['a', 'e', 'f']; 
 
var a2 = ['b', 'c', 'd']; 
 

 
a1.splice(1, 0, ...a2); 
 
console.log(a1)