वस्तुओं की सरणी घोषित करना


87

मेरे पास एक चर है जो एक सरणी है और मैं चाहता हूं कि सरणी के प्रत्येक तत्व को डिफ़ॉल्ट रूप से एक वस्तु के रूप में कार्य करें। इसे प्राप्त करने के लिए, मैं अपने कोड में ऐसा कुछ कर सकता हूं।

var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();

यह ठीक काम करता है, लेकिन मैं किसी भी सूचकांक संख्या का उल्लेख नहीं करना चाहता। मैं अपने सरणी के सभी तत्वों को एक वस्तु बनाना चाहता हूं। मैं इसे कैसे घोषित या आरंभ कर सकता हूं?

var sample = new Array();
sample[] = new Object();

मैंने उपरोक्त कोड की कोशिश की, लेकिन यह काम नहीं करता है। इंडेक्स नंबर का उपयोग किए बिना मैं ऑब्जेक्ट की एक सरणी को कैसे आरंभ करूं?


1
तो क्या आप डिफ़ॉल्ट रूप से सभी सरणी आइटम ऑब्जेक्ट बनाने की कोशिश कर रहे हैं?
जेफ शेवर

@ जेफ़ युप्प, आप सही कह रहे हैं ..
प्रसाद के।

मुझे ऐसा करने में बात नहीं दिख रही है। शायद यह समझना कि आप इसे क्यों करना चाहते हैं, यह समझने में हमारी मदद करेगा कि वास्तव में आपकी समस्या को कैसे हल किया जाए।
जेफ शेवर

1
वस्तुओं में क्या है? ऐसा लगता array.push(objYouWant )है कि फ़ंक्शन के अंदर लागू करना निश्चित रूप से समाधान होगा। जिस तरह से हर बार फ़ंक्शन चलाया जाता है, वह जो भी गुण चाहता है, उसके साथ एक नई वस्तु जोड़ता है।
जेफ शेवर

1
मैं यह नहीं देखता कि उन्हें अपने आप वस्तु होने पर आपकी स्थिति में मदद मिलेगी।
जेफ शेवर

जवाबों:


89

array.push()सरणी के अंत में एक आइटम जोड़ने के लिए उपयोग करें ।

var sample = new Array();
sample.push(new Object());

ऐसा करने के लिए nकई बार एक forलूप का उपयोग करें ।

var n = 100;
var sample = new Array();
for (var i = 0; i < n; i++)
    sample.push(new Object());

ध्यान दें कि आप के new Array()साथ []और इसके new Object()साथ स्थानापन्न कर सकते हैं {}:

var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
    sample.push({});

38

घोषित करने से आपका क्या मतलब है , इसके आधार पर , आप एक सरणी शाब्दिक में वस्तु शाब्दिक का उपयोग करके कोशिश कर सकते हैं :

var sample = [{}, {}, {} /*, ... */];

संपादित करें: यदि आपका लक्ष्य एक ऐसा सरणी है, जिसकी undefinedवस्तुएं डिफ़ॉल्ट रूप से खाली वस्तु शाब्दिक हैं, तो आप एक छोटी उपयोगिता फ़ंक्शन लिख सकते हैं:

function getDefaultObjectAt(array, index)
{
    return array[index] = array[index] || {};
}

फिर इसे इस तरह उपयोग करें:

var sample = [];
var obj = getDefaultObjectAt(sample, 0);     // {} returned and stored at index 0.

या और भी:

getDefaultObjectAt(sample, 1).prop = "val";  // { prop: "val" } stored at index 1.

बेशक, रिटर्न वैल्यू का सीधा काम getDefaultObjectAt()नहीं होगा, इसलिए आप नहीं लिख सकते हैं:

getDefaultObjectAt(sample, 2) = { prop: "val" };

@PrasathK, क्या आपका मतलब है कि आप अपने सरणी को गतिशील रूप से आबाद कर रहे हैं (जैसे एक लूप के माध्यम से)? तब आपको डैनियल के जवाब और उपयोग का पालन करना चाहिए push()
Frédéric Hamidi

@PrasathK, कि डाउनवोट मेरा नहीं है। अगर मैं आपको सही तरीके से समझूं, तो आपके प्रश्न के तहत जेफ शेवर की टिप्पणी सही है?
Frédéric Hamidi

23

आप भरण () का उपयोग कर सकते हैं ।

let arr = new Array(5).fill('lol');

let arr2 = new Array(5).fill({ test: 'a' });
// or if you want different objects
let arr3 = new Array(5).fill().map((_, i) => ({ id: i }));

5 मदों की एक सरणी बनाएगा। तब आप उदाहरण के लिए forEach का उपयोग कर सकते हैं।

arr.forEach(str => console.log(str));

ध्यान दें कि new Array(5)यह करते समय लंबाई 5 के साथ एक वस्तु है और सरणी खाली है। जब आप उपयोग करते हैं fill()तो आप जो भी चाहते हैं उसके साथ प्रत्येक व्यक्तिगत स्थान को भरते हैं।


आपके पोस्ट करने के ठीक बाद मैं इसे फ्रंट पेज पर देखने के लिए हुआ। इसने मेरी आंख को पकड़ लिया क्योंकि यह एक नए उत्तर के साथ एक पुराना सवाल था।
melpomene

मुझे लगता है कि अन्य उत्तरों की तुलना में यह उपयोग करना और समझना मुश्किल है।
सचिन शाह

12

देखने के बाद कि आपने टिप्पणियों में कैसे प्रतिक्रिया दी। ऐसा लगता है कि इसका उपयोग करना सबसे अच्छा होगा pushजैसा कि दूसरों ने सुझाव दिया है। इस तरह से आपको सूचकांकों को जानने की आवश्यकता नहीं है, लेकिन आप अभी भी सरणी में जोड़ सकते हैं।

var arr = [];
function funcInJsFile() {
    // Do Stuff
    var obj = {x: 54, y: 10};
    arr.push(obj);
}

इस स्थिति में, हर बार जब आप उस फ़ंक्शन का उपयोग करते हैं, तो यह सरणी में एक नई वस्तु को धक्का देगा।


हे भगवान .. मेरे पास उन वस्तुओं के लिए और फ़ंक्शन के प्रत्येक वस्तु या कॉल के लिए 100 से अधिक चर हैं I फ़ंक्शन की शुरुआत में कुछ चर के लिए कुछ मूल्यों को इनिशियलाइज़ करना है
प्रसाद के

11

आपको वास्तव में Objectकभी भी रिक्त बनाने की आवश्यकता नहीं है । आप उनके साथ कुछ नहीं कर सकते। आवश्यकतानुसार अपनी कार्यशील वस्तुओं को नमूने में जोड़ें। उपयोग pushडैनियल Imms के रूप में सुझाव दिया, और फ्रेडेरिक Hamidi के रूप में उपयोग शाब्दिक का सुझाव दिया। आप C की तरह जावास्क्रिप्ट प्रोग्राम करना चाहते हैं।

var samples = []; /* If you have no data to put in yet. */
/* Later, probably in a callback method with computed data */
/* replacing the constants. */
samples.push(new Sample(1, 2, 3)); /* Assuming Sample is an object. */
/* or */
samples.push({id: 23, chemical: "NO2", ppm: 1.4}); /* Object literal. */

मेरा मानना ​​है कि उपयोग करने new Array(10)से 10 undefinedतत्वों के साथ एक सरणी बनती है।


10

आप इस तरह से एक पंक्ति में "ऑब्जेक्ट प्रकार" की एक सरणी को इंस्टेंट कर सकते हैं (बस अपनी वस्तु के साथ नई वस्तु को बदलें ):

var elements = 1000;
var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });

2
अगर मुझे तत्वों का मूल्य नहीं पता है तो क्या होगा?
प्रातः काल

6

खैर array.lengthचाल चलनी चाहिए या नहीं? कुछ ऐसा है, मेरा मतलब है कि यदि आप इसे पढ़ते हैं तो आपको इंडेक्स रेंज को जानने की जरूरत नहीं है।

var arrayContainingObjects = [];
for (var i = 0; i < arrayContainingYourItems.length; i++){
    arrayContainingObjects.push {(property: arrayContainingYourItems[i])};
}

हो सकता है कि मैं आपके प्रश्न को सही ढंग से नहीं समझ पाया, लेकिन आपको इस तरह से अपने ऐरे की लंबाई प्राप्त करने और उन्हें वस्तुओं में बदलने में सक्षम होना चाहिए। ईमानदार होने के लिए डैनियल ने उसी तरह का जवाब दिया। आप अपने चर-लंबाई को उसके चर में सहेज सकते हैं और यह किया जाएगा।

अगर मेरी राय में ऐसा नहीं होना चाहिए, तो आप अपनी ऐरे-लेंथ नहीं पा सकते। जैसा कि आपने कहा कि w / o इंडेक्स नंबर प्राप्त कर रहा है जिसे आप इस तरह से कर सकते हैं:

var arrayContainingObjects = [];
for (;;){
    try{
        arrayContainingObjects.push {(property: arrayContainingYourItems[i])};
    }
}
catch(err){
    break;
}

यह ऊपर दिए गए संस्करण का अच्छा-अच्छा संस्करण नहीं है, लेकिन जब तक आप इंडेक्स रेंज से "रन" नहीं करेंगे तब तक लूप निष्पादित होगा।


5

इसे इस्तेमाल करे-

var arr = [];
arr.push({});

यह एक वस्तु होने के लिए केवल एक तत्व बनाता है .. मैं चाहता हूं कि मेरे सभी तत्व एक वस्तु हों
Prath K

1
@ShuklaSannidhya इस पोस्ट में इस बात की व्याख्या का अभाव है कि यह क्या करता है और आप इसे क्यों सुझाते हैं। ...बस केह रहा हू।
मिकमैकुसा

5
//making array of book object
var books = [];
    var new_book = {id: "book1", name: "twilight", category: "Movies", price: 10};
    books.push(new_book);
    new_book = {id: "book2", name: "The_call", category: "Movies", price: 17};
    books.push(new_book);
    console.log(books[0].id);
    console.log(books[0].name);
    console.log(books[0].category);
    console.log(books[0].price);

// also we have array of albums
var albums = []    
    var new_album = {id: "album1", name: "Ahla w Ahla", category: "Music", price: 15};
    albums.push(new_album);
    new_album = {id: "album2", name: "El-leila", category: "Music", price: 29};
    albums.push(new_album);
//Now, content [0] contains all books & content[1] contains all albums
var content = [];
content.push(books);
content.push(albums);
var my_books = content[0];
var my_albums = content[1];
console.log(my_books[0].name);
console.log(my_books[1].name); 

console.log(my_albums[0].name);
console.log(my_albums[1].name); 

यह उदाहरण मेरे साथ काम करता है। ब्राउज़र कंसोल पर आउटपुट के लिए स्नैपशॉट


1

सरणी के अंत में एक आइटम जोड़ने के लिए array.push () का उपयोग करें।

var sample = new Array();
sample.push(new Object());

आप इसका उपयोग कर सकते हैं

var x = 100;
var sample = [];
for(let i=0; i<x ;i++){
  sample.push({}) 
  OR
  sample.push(new Object())
}    

1

ForEach के उपयोग से हम डेटा को स्टोर कर सकते हैं यदि हमारे पास पहले से ही डेटा है तो हम डेटा पर कुछ व्यवसाय लॉगिन करना चाहते हैं।

var sample = new Array();
var x = 10;
var sample = [1,2,3,4,5,6,7,8,9];
var data = [];

sample.forEach(function(item){
    data.push(item);
})

document.write(data);

लूप के लिए सरल का उपयोग करके उदाहरण

var data = [];
for(var i = 0 ; i < 10 ; i++){
   data.push(i);
}
document.write(data);

1

यदि आप चाहते हैं कि किसी सरणी के अंदर सभी तत्व ऑब्जेक्ट हों, तो आप किसी सरणी में सम्मिलित करने से पहले ऑब्जेक्ट पर सत्यापन लागू करने के लिए जावास्क्रिप्ट प्रॉक्सी का उपयोग कर सकते हैं। यह काफी सरल है,

const arr = new Proxy(new Array(), {
  set(target, key, value) {
    if ((value !== null && typeof value === 'object') || key === 'length') {
      return Reflect.set(...arguments);
    } else {
      throw new Error('Only objects are allowed');
    }
  }
});

अब अगर आप ऐसा कुछ करने की कोशिश करते हैं:

arr[0] = 'Hello World'; // Error

यह एक त्रुटि फेंक देगा। हालाँकि यदि आप कोई वस्तु डालते हैं, तो उसे अनुमति दी जाएगी:

arr[0] = {}; // Allowed

प्रॉक्सी पर अधिक जानकारी के लिए कृपया इस लिंक को देखें: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

यदि आप एक पॉलीफ़िल कार्यान्वयन की तलाश में हैं, तो आप इस लिंक को चेकआउट कर सकते हैं: https://github.com/GoogleChrome/proxy-polyfill


1

मेरे प्रोजेक्ट से नीचे का कोड शायद आपके लिए अच्छा हो

  reCalculateDetailSummary(updateMode: boolean) {

    var summaryList: any = [];
    var list: any;
    if (updateMode) { list = this.state.pageParams.data.chargeDefinitionList }
    else {
        list = this.state.chargeDefinitionList;
    }

    list.forEach((item: any) => {
        if (summaryList == null || summaryList.length == 0) {
            var obj = {
                chargeClassification: item.classfication,
                totalChargeAmount: item.chargeAmount
            };
            summaryList.push(obj);

        } else {
            if (summaryList.find((x: any) => x.chargeClassification == item.classfication)) {
                summaryList.find((x: any) => x.chargeClassification == item.classfication)
                    .totalChargeAmount += item.chargeAmount;
            }
        }
    });

    if (summaryList != null && summaryList.length != 0) {
        summaryList.push({
            chargeClassification: 'Total',
            totalChargeAmount: summaryList.reduce((a: any, b: any) => a + b).totalChargeAmount
        })
    }

    this.setState({ detailSummaryList: summaryList });
}

1
const sample = [];
    list.forEach(element => {
      const item = {} as { name: string, description: string };
      item.name= element.name;
      item.description= element.description;
      sample.push(item);
    });
    return sample;

किसी को भी इस कोशिश .. और कुछ सुझाव।


-7
var ArrayofObjects = [{}]; //An empty array of objects.

1
नहीं, यह एक वस्तु का एक गैर-खाली सरणी है ।
क्वेंटिन

ढेर अतिप्रवाह में आपका स्वागत है! हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और वे लोग आपके कोड सुझाव के कारणों को नहीं जान सकते हैं। कृपया अपने कोड को व्याख्यात्मक टिप्पणियों के साथ भीड़ देने की कोशिश न करें, इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है!
kayess
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.