wake-up-neo.net

Array von Objekten deklarieren

Ich habe eine Variable, die ein Array ist, und ich möchte, dass jedes Element des Arrays standardmäßig als Objekt fungiert. Um dies zu erreichen, kann ich in meinem Code so etwas tun.

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

Das funktioniert gut, aber ich möchte keine Indexnummer erwähnen. Ich möchte, dass alle Elemente meines Arrays ein Objekt sind. Wie kann ich es deklarieren oder initialisieren?

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

Ich habe den obigen Code ausprobiert, aber er funktioniert nicht. Wie kann ich ein Array von Objekten initialisieren, ohne eine Indexnummer zu verwenden?

70
Prasath K

Verwenden Sie array.Push(), um ein Element am Ende des Arrays hinzuzufügen.

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

Dazu verwenden Sie n-mal eine for-Schleife.

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

Beachten Sie, dass Sie new Array() auch durch [] und new Object() durch {} ersetzen können.

var n = 100;
var sample = [];
for (var i = 0; i < n; i++)
    sample.Push({});
78
Daniel Imms

Je nachdem, was Sie mit deklarieren meinen, können Sie versuchen, Objektliterale in einem Array-Literal zu verwenden:

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

EDIT: Wenn Ihr Ziel ein Array ist, dessen undefined-Elemente standardmäßig leere Objektliterale sind, können Sie eine kleine Hilfsfunktion schreiben:

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

Dann benutze es so:

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

Oder auch:

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

Natürlich funktioniert die direkte Zuweisung zum Rückgabewert von getDefaultObjectAt() nicht, sodass Sie nicht schreiben können:

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

Nachdem Sie gesehen haben, wie Sie in den Kommentaren reagiert haben. Es scheint, als wäre es am besten, Push zu verwenden, wie andere vorgeschlagen haben. Auf diese Weise müssen Sie die Indizes nicht kennen, Sie können sie jedoch dem Array hinzufügen.

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

In diesem Fall wird jedes Mal, wenn Sie diese Funktion verwenden, ein neues Objekt in das Array verschoben.

11
Jeff Shaver

Sie müssen nie wirklich leere Objects erstellen. Mit ihnen kann man nichts anfangen. Fügen Sie einfach Ihre Arbeitsobjekte nach Bedarf zur Probe hinzu. Verwenden Sie Push wie von Daniel Imms vorgeschlagen, und verwenden Sie Literale wie von Frédéric Hamidi vorgeschlagen. Sie möchten Javascript wie C programmieren.

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. */

Ich glaube, mit new Array(10) wird ein Array mit 10 undefined-Elementen erstellt.

10
Eric Jablow

Sie können ein Array von "Objekttyp" in einer Zeile wie folgt instanziieren (ersetzen Sie einfach new Object () durch Ihr Objekt):

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

Sie können fill () then map verwenden. Es ist selbsterklärend.

let arr = new Array(5).fill(null).map(v => new String('lol'));

Erzeugt ein Array von 5 Strings-Objekten (keine Zeichenfolge!). Dann können Sie beispielsweise forEach verwenden.

arr.forEach(d => console.log(d.toString()));

Die Antwort auf diese Frage ist meiner Meinung nach unnötig wortreich. Ich hoffe, das wird für einige von Ihnen nützlich sein.

5
Ced

Nun, array.length sollte den Trick tun oder nicht? Ich meine, Sie brauchen den Indexbereich nicht zu kennen, wenn Sie ihn nur lesen.

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

Vielleicht habe ich Ihre Frage nicht richtig verstanden, aber Sie sollten in der Lage sein, die Länge Ihres Arrays auf diese Weise zu ermitteln und sie in Objekte umzuwandeln. Daniel gab die gleiche Antwort, um ehrlich zu sein. Sie können nur die Array-Länge in seiner Variablen speichern, und es wäre erledigt.

WENN und dies sollte meiner Meinung nach nicht passieren, können Sie Ihre Array-Länge nicht erhalten. Wie Sie sagten, ohne die Indexnummer zu bekommen, könnten Sie es so machen:

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

Es ist die nicht-nette Version der obigen, aber die Schleife würde ausgeführt, bis Sie aus dem Indexbereich "laufen".

5
spitterfly

Versuche dies-

var arr = [];
arr.Push({});
3
ShuklaSannidhya
//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); 

Dieses Beispiel funktioniert mit mir . Momentaufnahme für die Ausgabe in der Browserkonsole

3
Abdallah Okasha

Der folgende Code aus meinem Projekt ist vielleicht gut für Sie

   var newList: any = [];

        this.state.chargeDetailList.forEach((item: any) => {
            if (newList == null ) {
                var obj = {
                    chargeClassification: item.Classfication,
                    totalChargeAmount: item.ChargeAmount
                };
                newList.Push(obj);

            } else {
                newList.Find((x: any) => x.chargeClassification == item.Classfication)
                    .totalChargeAmount += item.ChargeAmount;
            }

        });

        if (newList.any() || newList.length) {
            newList.Push({
                chargeClassification: 'Total',
                totalChargeAmount: newList.sum((x: any) => x.totalChargeAmount)
            })
        }
0
Metin Atalay

Wenn Sie forEach verwenden, können wir Daten speichern, falls wir bereits Daten haben. 

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);

Beispiel mit der einfachen for-Schleife 

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

Verwenden Sie array.Push (), um ein Element am Ende des Arrays hinzuzufügen.

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

du kannst es benutzen

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

Wenn Sie möchten, dass alle Elemente in einem Array Objekte sind, können Sie JavaScript Proxy verwenden, um eine Überprüfung auf Objekte anzuwenden, bevor Sie sie in ein Array einfügen. Es ist ganz einfach,

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');
    }
  }
});

Nun, wenn Sie versuchen, so etwas zu tun:

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

Es wird ein Fehler ausgegeben. Wenn Sie jedoch ein Objekt einfügen, ist dies zulässig:

arr[0] = {}; // Allowed

Weitere Informationen zu Proxies finden Sie unter diesem Link: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

Wenn Sie nach einer Polyfill-Implementierung suchen, können Sie diesen Link besuchen: https://github.com/GoogleChrome/proxy-polyfill

0
Sachin Singh