javascript - जावास्क्रिप्ट पुश सरणी मान किसी अन्य सरणी में




arrays (9)

मेरे पास एक जावास्क्रिप्ट सरणी newArray जिसे मैं एक नई सरणी newArray में धक्का देना चाहता 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 जोड़ना?


जावास्क्रिप्ट ES6 के साथ, आप ... ऑपरेटर को एक स्प्रेड ऑपरेटर के रूप में उपयोग कर सकते हैं जो अनिवार्य रूप से सरणी को मानों में परिवर्तित कर देगा। फिर, आप ऐसा कुछ कर सकते हैं:

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

myArray = [
  ...myArray,
  ...moreData,
];

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


निम्नलिखित मेरे लिए सबसे सरल लगता है:

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

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

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

अद्यतन यदि आप उपलब्ध स्लाइस के साथ जावास्क्रिप्ट के संस्करण का उपयोग कर रहे हैं, तो आप push अभिव्यक्ति को सरल बना सकते हैं:

newArray.push(...dataArray2)

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

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

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

हालांकि, ऐसा लगता है कि बड़े सरणी (100,000 सदस्यों या अधिक के आदेश के लिए), यह चाल विफल हो सकती है । ऐसे सरणी के लिए, लूप का उपयोग करना एक बेहतर तरीका है। विवरण के लिए https://.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]);
    }
};

यह एक कामकाजी कोड है और यह ठीक काम करता है:

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 newArray = dataArray1.slice(0);

MDN बारे में बात करने के कई जवाब हैं। यहां एक स्पष्ट उदाहरण दिया गया है:

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]

यदि आपके पास ES6 वाक्यविन्यास है:

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


MDN से एक सुरुचिपूर्ण तरीका मिला

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)

क्या यह आपकी समस्या का समाधान करता है?






arrays