जवाबों:
यदि आप दो से अधिक सरणियों को संक्षिप्त कर रहे concat()
हैं, तो सुविधा और संभावित प्रदर्शन के लिए रास्ता है।
var a = [1, 2], b = ["x", "y"], c = [true, false];
var d = a.concat(b, c);
console.log(d); // [1, 2, "x", "y", true, false];
सिर्फ दो सरणियों को समेटने के लिए, यह तथ्य कि push
सरणी को जोड़ने के लिए तत्वों से मिलकर कई तर्कों को स्वीकार किया जाता है, इसका उपयोग नए सरणी का उत्पादन किए बिना तत्वों को एक सरणी से दूसरे के अंत में जोड़ने के लिए किया जा सकता है। इसके साथ slice()
इसका उपयोग भी किया जा सकता है, concat()
लेकिन ऐसा करने से कोई प्रदर्शन लाभ नहीं होता है ।
var a = [1, 2], b = ["x", "y"];
a.push.apply(a, b);
console.log(a); // [1, 2, "x", "y"];
ECMAScript 2015 और बाद में, इसे और भी कम किया जा सकता है
a.push(...b)
हालांकि, ऐसा लगता है कि बड़े सरणियों (100,000 सदस्यों या अधिक के आदेश के लिए) के लिए, तत्वों की एक सरणी push
(या तो apply()
या ECMAScript 2015 प्रसार ऑपरेटर का उपयोग करके ) पास करने वाली तकनीक विफल हो सकती है। ऐसे सरणियों के लिए, लूप का उपयोग करना बेहतर दृष्टिकोण है। देखें https://stackoverflow.com/a/17368101/96100 जानकारी के लिए।
a.concat(b)
परीक्षण के मामले में अनावश्यक रूप से सरणी की एक प्रति बनाकर a
उसे फेंकने के लिए लगता है।
concat()
कि आम तौर पर तेज है। जगह में मौजूदा सरणी पर एक सरणी को बदलने के मामले में, push()
जाने का रास्ता है। मैंने अपना उत्तर अपडेट कर दिया।
[].concat.apply([], [array1, array2, ...])
संपादित करें : दक्षता का प्रमाण: http://jsperf.com/multi-array-concat/7
EDIT2 : टिम Supinie टिप्पणी में कहा गया है कि इस दुभाषिया कॉल स्टैक आकार पार कर सकते हैं। यह शायद js इंजन पर निर्भर है, लेकिन मैंने कम से कम क्रोम पर "अधिकतम कॉल स्टैक आकार को पार कर लिया है"। टेस्ट मामला: [].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))
। (मैंने वर्तमान में स्वीकृत उत्तर का उपयोग करके एक ही त्रुटि प्राप्त की है, इसलिए कोई ऐसे उपयोग के मामलों की आशंका कर रहा है या दूसरों के लिए एक पुस्तकालय का निर्माण कर रहा है, विशेष परीक्षण आवश्यक हो सकता है कोई फर्क नहीं पड़ता कि आप कौन सा समाधान चुनते हैं।)
अब आप सरणियों को फैलाने के लिए स्प्रेड सिंटैक्स का उपयोग कर सकते हैं:
const arr1 = [0, 1, 2],
arr2 = [3, 4, 5];
const result1 = [...arr1, ...arr2]; // -> [0, 1, 2, 3, 4, 5]
// or...
const result2 = [...arr2, ...arr1]; // -> [3, 4, 5, 0, 1, 2]
concat()
विधि दो या अधिक सरणियों शामिल होने के लिए प्रयोग किया जाता है। यह मौजूदा सरणियों को नहीं बदलता है, यह केवल सम्मिलित सरणियों की एक प्रति लौटाता है।
array1 = array1.concat(array2, array3, array4, ..., arrayN);
concat
का उपयोग विशेष रूप से मूल सरणी को म्यूट किए बिना नए सरणियों को बनाने के लिए किया जाता है। आप अद्यतन करना चाहते हैं array1
, तो आप का उपयोग करना होगाarray1.push(...array2, ...array3, ...array4)
Array.prototype.concat.apply का उपयोग करें कई सरणियों के संघनन को संभालने के लिए:
var resultArray = Array.prototype.concat.apply([], arrayOfArraysToConcat);
उदाहरण:
var a1 = [1, 2, 3],
a2 = [4, 5],
a3 = [6, 7, 8, 9];
Array.prototype.concat.apply([], [a1, a2, a3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
यदि आप परिणाम को मैप / फ़िल्टर / सॉर्ट इत्यादि के माध्यम से पाइपिंग के बीच में रखते हैं और आप एरेज़ के एरेकट को प्राप्त करना चाहते हैं, तो आप उपयोग कर सकते हैं reduce
let sorted_nums = ['1,3', '4,2']
.map(item => item.split(',')) // [['1', '3'], ['4', '2']]
.reduce((a, b) => a.concat(b)) // ['1', '3', '4', '2']
.sort() // ['1', '2', '3', '4']
कई सरणियों और ES6 की सरणी के लिए, का उपयोग करें
Array.prototype.concat(...arr);
उदाहरण के लिए:
const arr = [[1, 2, 3], [4, 5, 6], [7, 8 ,9]];
const newArr = Array.prototype.concat(...arr);
// output: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
newArr = Array.from(new Set(newArr));
।
any[]
? टाइपिंग वहाँ है - अजीब।
[].concat.apply([], ...arr)
बड़े वॉल्यूम पर बेहतर प्रदर्शन करता है।
अब हम कई सरणियों का उपयोग करके जोड़ सकते हैं ES6
Spread
। concat()
कॉन्ट्रासेप्टिव एरे का उपयोग करने के बजाय , कई एरे को एक चपटा सरणी में संयोजित करने के लिए फैल सिंटैक्स का उपयोग करने का प्रयास करें। उदाहरण के लिए:
var a = [1,2];
var b = [3,4];
var c = [5,6,7];
var d = [...a, ...b, ...c];
// resulting array will be like d = [1,2,3,4,5,6,7]
आप perfomance की तुलना करने के लिए jsperf.com साइट का उपयोग कर सकते हैं । यहाँ के लिए लिंक है concat ।
के बीच तुलना जोड़ा गया:
var c = a.concat(b);
तथा:
var c = [];
for (i = 0; i < a.length; i++) {
c.push(a[i]);
}
for (j = 0; j < b.length; j++) {
c.push(b[j]);
}
दूसरा क्रोम में लगभग 10 गुना धीमा है।
push.apply()
, जो concat()
क्रोम को छोड़कर सभी ब्राउज़रों की तुलना में तेज़ प्रतीत होता है । मेरा जवाब देखिए।
आसानी से कॉनकैट फ़ंक्शन के साथ:
var a = [1,2,3];
var b = [2,3,4];
a = a.concat(b);
>> [1,2,3,2,3,4]
यहां एक फ़ंक्शन है जिसके द्वारा आप कई संख्या में सरणियों को संक्षिप्त कर सकते हैं
function concatNarrays(args) {
args = Array.prototype.slice.call(arguments);
var newArr = args.reduce( function(prev, next) {
return prev.concat(next) ;
});
return newArr;
}
उदाहरण -
console.log(concatNarrays([1, 2, 3], [5, 2, 1, 4], [2,8,9]));
उत्पादन होगा
[1,2,3,5,2,1,4,2,8,9]
पुश के साथ मर्ज करें:
const array1 = [2, 7, 4];
const array2 = [3, 5,9];
array1.push(...array2);
console.log(array1)
कॉनैट और स्प्रेड ऑपरेटर का उपयोग करना :
const array1 = [1,2];
const array2 = [3,4];
// Method 1: Concat
const combined1 = [].concat(array1, array2);
// Method 2: Spread
const combined2 = [...array1, ...array2];
console.log(combined1);
console.log(combined2);
यदि आपके पास सरणी है और तत्वों को एकल सरणी में समाहित करना चाहते हैं, तो निम्न कोड का प्रयास करें (ES2015 की आवश्यकता है):
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = [];
for (let arr of arrOfArr) {
newArr.push(...arr);
}
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
या यदि आप कार्यात्मक प्रोग्रामिंग में हैं
let arrOfArr = [[1,2,3,4],[5,6,7,8]];
let newArr = arrOfArr.reduce((result,current)=>{
result.push(...current);
return result;
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
या प्रसार ऑपरेटर के बिना ES5 सिंटैक्स के साथ और भी बेहतर
var arrOfArr = [[1,2,3,4],[5,6,7,8]];
var newArr = arrOfArr.reduce((result,current)=>{
return result.concat(current);
});
console.log(newArr);
//Output: [1,2,3,4,5,6,7,8];
यदि आप नहीं जानते हैं तो यह तरीका आसान है। कोड समय पर सरणियों का।
ES6 के साथ छोटा।
new Set([].concat(...Array));
यह कई सरणियों को समाप्त और अद्वितीय करता है ;
new Set()
डुप्लिकेट आइटम हटाता है। बस इसे हटा दें। [].concat(...Array)
अगर वहाँ केवल दो सरणियों को समतल करना है, और आपको वास्तव में एक नया बनाने के बजाय एक सरणियों को जोड़ने की आवश्यकता है , तो धक्का या लूप जाने का रास्ता है।
बेंचमार्क: https://jsperf.com/concat-small-arrays-vs-push-vs-loop/
इसे इस्तेमाल करे:
i=new Array("aaaa", "bbbb");
j=new Array("cccc", "dddd");
i=i.concat(j);
यदि एन सरणियों को डेटाबेस से प्राप्त किया जाता है और हार्डकोड नहीं किया जाता है, तो मैं ईएस 6 का उपयोग करके इसे इस तरह से करूँगा
let get_fruits = [...get_fruits , ...DBContent.fruit];