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?
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({});
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" };
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.
Sie müssen nie wirklich leere Object
s 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.
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(); });
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.
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".
Versuche dies-
var arr = [];
arr.Push({});
//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
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)
})
}
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);
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())
}
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