किसी ऐरे से ऑब्जेक्ट कैसे जोड़ें


317

मैं एक सरणी (जावास्क्रिप्ट या jquery) में किसी ऑब्जेक्ट को कैसे जोड़ सकता हूं ? उदाहरण के लिए, इस कोड में क्या समस्या है?

function(){
    var a = new array();
    var b = new object();
    a[0]=b;
}

मैं इस कोड का उपयोग function1 की सरणी में कई ऑब्जेक्ट्स को बचाने के लिए करना चाहता हूं और array2 में ऑब्जेक्ट का उपयोग करने के लिए function2 को कॉल करने के लिए करता हूं।

  1. मैं किसी ऐरे में ऑब्जेक्ट को कैसे सहेज सकता हूं?
  2. मैं किसी ऑब्जेक्ट को किसी सरणी में कैसे रख सकता हूं और इसे एक चर में कैसे सहेज सकता हूं?

12
कृपया पोस्ट कोड में त्रुटियों को ठीक न करें, जैसा कि 5 ने संपादित किया। यदि आप प्रश्न में एक साधारण त्रुटि को सही करते हैं, तो अक्सर उत्तर के मौजूद होने का कोई कारण नहीं होता है।
पॉल

इसके अलावा, pushयहाँ पहले से ही कई बार सुझाव दिया गया है। कृपया, इस धागे को अब किसी अन्य pushसुझाव के साथ प्रदूषित न करें ।
बोगीयन हॉफमैन

जवाबों:


630

Array.push () का उपयोग करके एक सरणी में कुछ भी डालें।

var a=[], b={};
a.push(b);    
// a[0] === b;

Arrays पर अतिरिक्त जानकारी

एक समय में एक से अधिक आइटम जोड़ें

var x = ['a'];
x.push('b', 'c');
// x = ['a', 'b', 'c']

किसी सरणी की शुरुआत में आइटम जोड़ें

var x = ['c', 'd'];
x.unshift('a', 'b');
// x = ['a', 'b', 'c', 'd']

एक सरणी की सामग्री को दूसरे में जोड़ें

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
x.push.apply(x, y);
// x = ['a', 'b', 'c', 'd', 'e', 'f']
// y = ['d', 'e', 'f']  (remains unchanged)

दो सरणियों की सामग्री से एक नया सरणी बनाएं

var x = ['a', 'b', 'c'];
var y = ['d', 'e', 'f'];
var z = x.concat(y);
// x = ['a', 'b', 'c']  (remains unchanged)
// y = ['d', 'e', 'f']  (remains unchanged)
// z = ['a', 'b', 'c', 'd', 'e', 'f']

मेरे पास एक प्रश्न भी है: myArray = []; myArray.push ({'text': 'कुछ टेक्स्ट', 'id': 13}); और अब myArray खाली है। इसलिए अगर हम myArray से मूल्य प्राप्त करने की कोशिश करते हैं [0] ['पाठ'] यह खाली हो जाएगा, क्यों? take.ms/jSvbn
fdrv

कुछ सही नहीं लगता। सुनिश्चित करें कि कोई समस्या नहीं है। MyArray घोषित करने के लिए let / var का उपयोग करें। क्योंकि myArray.push हमेशा myArray को म्यूट करेगा।
जॉन स्ट्रिकलर

58
var years = [];
for (i= 2015;i<=2030;i=i+1)
{
years.push({operator : i})
}

यहाँ सरणी वर्षों में मान जैसे हैं

years[0]={operator:2015}
years[1]={operator:2016}

यह इस तरह जारी है।


55

सबसे पहले, कोई है objectया नहीं array। कर रहे हैं Objectऔर Array। दूसरे, आप ऐसा कर सकते हैं:

a = new Array();
b = new Object();
a[0] = b;

अब इसका एकमात्र तत्व के रूप में aएक सरणी होगी b


4
+1 कम से कम जटिल जवाब के लिए। मैंने ओपी के प्रश्न 2 के उत्तर को शामिल करने के लिए इसका विस्तार नीचे किया है।
सैम

30

ES6अंकन का उपयोग करना , आप कुछ इस तरह कर सकते हैं:

लागू करने के लिए आप इस तरह से प्रसार ऑपरेटर का उपयोग कर सकते हैं :

var arr1 = [1,2,3]
var obj = 4
var newData = [...arr1, obj] // [1,2,3,4]
console.log(newData);


20
  • जावास्क्रिप्ट केस-संवेदी है । कॉल करने new array()और new object()फेंकने के ReferenceErrorबाद से वे मौजूद नहीं हैं।
  • new Array()इसके त्रुटि-प्रवण व्यवहार के कारण बचना बेहतर है ।
    इसके बजाय, नई सरणी के साथ असाइन करें = [val1, val2, val_n]। वस्तुओं के लिए, का उपयोग करें = {}
  • ऐसे कई तरीके हैं जब यह एक सरणी का विस्तार करने की बात आती है (जैसा कि जॉन के जवाब में दिखाया गया है ) लेकिन सबसे सुरक्षित तरीका concatइसके बजाय उपयोग करना होगा pushconcatमूल सरणी को अछूता छोड़कर एक नया सरणी देता है। pushकॉलिंग सरणी को म्यूट करता है, जिसे टाला जाना चाहिए , खासकर यदि सरणी विश्व स्तर पर परिभाषित है।
  • अनपेक्षित म्यूटेशन से बचने के लिए ऑब्जेक्ट के साथ-साथ नए एरे को भी फ्रीज करना एक अच्छा अभ्यास है । एक जमी हुई वस्तु न तो परस्पर या न ही एक्स्टेंसिबल (उथली) है।

उन बिंदुओं को लागू करने और अपने दो सवालों के जवाब देने के लिए, आप एक फ़ंक्शन को इस तरह परिभाषित कर सकते हैं:

function appendObjTo(thatArray, newObj) {
  const frozenObj = Object.freeze(newObj);
  return Object.freeze(thatArray.concat(frozenObj));
}

उपयोग:

// Given
const myArray = ["A", "B"];
// "save it to a variable"
const newArray = appendObjTo(myArray, {hello: "world!"});
// returns: ["A", "B", {hello: "world!"}]. myArray did not change.

2
"उपयोग" जिसने इसे मेरा व्यक्तिगत पसंदीदा उत्तर बना दिया है।
HPWD ऑक्ट

@boghyon, मैं फ्रीज और म्यूटेशन के बारे में उत्सुक हूं। क्या आप उस एरे में बदलाव के बारे में बात कर रहे हैं जो सीधे कॉनैट विधि के कारण हो सकता है, या किसी '.concat ()' के प्रदर्शन की प्रक्रिया के दौरान स्क्रिप्ट में कहीं और एरे से किए गए परिवर्तनों के कारण हो सकता है? अगर दूसरी, जावास्क्रिप्ट को सिंगल-थ्रेडेड होने के कारण इसे स्वचालित रूप से रोका नहीं जाना चाहिए, यहां तक ​​कि नियंत्रण के बाद से अतुल्यकालिक कोड के मामले में भी, कम से कम सैद्धांतिक रूप से, विधि पूरी होने तक वापस नहीं किया जाना चाहिए?
19

@jdmayfield: JS की मूल्यांकन रणनीति ऑब्जेक्ट-शेयरिंग द्वारा कॉल की जाती है । जब वस्तुओं को पास किया जाता है, तो उनकी नकल नहीं की जाती है। उन वस्तुओं में उत्परिवर्तन, जब चारों ओर पारित किए जा रहे हैं, हमेशा कॉलर्स को तुरंत दिखाई देते हैं, भले ही म्यूटेटर को अतुल्यकालिक, पूर्ण या नहीं कहा जाता था। चूँकि इस तरह के दुष्प्रभाव से अक्सर कीड़े हो जाते हैं, हम मूल से विघटित नई वस्तु को वापस कर रहे हैं। वस्तुओं को अपरिवर्तनीय बनाना (जैसे के माध्यम से freeze) अनपेक्षित म्यूटेशन को रोकने के लिए सिर्फ एक अतिरिक्त कदम है।
बोगीयन हॉफमैन

@jdmayfield: लेकिन जैसा कि आप पहले ही अनुमान लगा चुके हैं, हर बार नई वस्तुओं का निर्माण जल्दी हो सकता है जब ऑब्जेक्ट विशाल हो जाते हैं। ऐसे मामलों के लिए, सहायक कामगार हैं, जो मोरी (थोड़े से मृत) और इम्युटेबल.जैस जैसे लगातार डेटा संरचनाओं का लाभ उठाकर इसे कुशल बनाते हैं । यहाँ "क्यों अपरिवर्तनीयता" का संक्षिप्त परिचय दिया गया है: youtu.be/e-5obm1G_FY
Boghyon Hoffmann

9

नंबर 2 के उत्तर को शामिल करने के लिए गेबी पुरकारू के उत्तर का विस्तार करना।

a = new Array();
b = new Object();
a[0] = b;

var c = a[0]; // c is now the object we inserted into a...

8

/* array literal */
var aData = [];

/* object constructur */
function Data(firstname, lastname) {
  this.firstname = firstname;
  this.lastname = lastname;
  this.fullname = function() {
    return (this.firstname + " " + this.lastname);
  };
}

/* store object into array */
aData[aData.length] = new Data("Java", "Script"); // aData[0]

aData.push(new Data("Jhon", "Doe"));
aData.push(new Data("Anna", "Smith"));
aData.push(new Data("Black", "Pearl"));

aData[aData.length] = new Data("stack", "overflow"); // aData[4]

/* loop arrray */
for (var x in aData) {
  alert(aData[x].fullname());
}

/* convert array of object into string json */
var jsonString = JSON.stringify(aData);
document.write(jsonString);


7

obejctस्पष्ट रूप से एक टाइपो है। लेकिन दोनों को objectऔर arrayबड़े अक्षरों की आवश्यकता है।

आप के लिए छोटे हाथों का उपयोग कर सकते हैं new Arrayऔर new Objectये हैं []और{}

आप सरणी का उपयोग करके डेटा को पुश कर सकते हैं .push। यह इसे सरणी के अंत में जोड़ता है। या आप डेटा को शामिल करने के लिए एक इंडेक्स सेट कर सकते हैं।

function saveToArray() {
    var o = {};
    o.foo = 42;
    var arr = [];
    arr.push(o);
    return arr;
}

function other() {
    var arr = saveToArray();
    alert(arr[0]);
}

other();

5

वैकल्पिक उत्तर पर यह है।

अगर आपके पास है और इस तरह से है: var contacts = [bob, mary];

और आप इस सरणी में एक और सरणी रखना चाहते हैं, आप इस तरह से कर सकते हैं:

फ़ंक्शन कंस्ट्रक्टर की घोषणा करें

function add (firstName,lastName,email,phoneNumber) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phoneNumber = phoneNumber;
}

फ़ंक्शन से ऑब्जेक्ट बनाएं:

var add1 = new add("Alba","Fas","Des@gmail.com","[098] 654365364");

और सरणी में ऑब्जेक्ट जोड़ें:

contacts[contacts.length] = add1;

3
a=[];
a.push(['b','c','d','e','f']);

6
नमस्ते, एसओ में आपका स्वागत है। कृपया उत्तर के रूप में कोड डंप न करें। अपने विचारों को समझाएं ताकि उपयोगकर्ता बेहतर समझ सकें कि क्या हो रहा है। धन्यवाद।
Cululhu

2

जिस तरह से मैंने ऑटो सूची के साथ ऑब्जेक्ट क्रिएटर बनाया है:

var list = [];

function saveToArray(x) {
    list.push(x);
};

function newObject () {
    saveToArray(this);
};

0

यदि आप अपना कोड इस तरह उपयोग करते हैं तो आप एक स्कोप समस्या में चल रहे हैं। यदि आपको उनके बीच उपयोग करने की योजना है (या यदि कॉल कर रहे हैं, तो इसे एक पैरामीटर के रूप में पास करें) आपको कार्यों के बाहर इसे घोषित करना होगा।

var a = new Array();
var b = new Object();

function first() {
a.push(b);
// Alternatively, a[a.length] = b
// both methods work fine
}

function second() {
var c = a[0];
}

// code
first();
// more code
second();
// even more code
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.