2013-04-01 8 views
59

Ho una variabile che è un array e voglio che ogni elemento dell'array agisca come un oggetto per impostazione predefinita. Per ottenere ciò, posso fare qualcosa del genere nel mio codice.Dichiarazione dell'array di oggetti

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

Questo funziona correttamente, ma non voglio menzionare alcun numero di indice. Voglio che tutti gli elementi del mio array siano un oggetto. Come posso dichiararlo o inizializzarlo?

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

Ho provato il codice sopra ma non funziona. Come inizializzare un array di oggetti senza usare un numero di indice?

+1

Quindi stai cercando di rendere tutti gli elementi dell'array gli oggetti, per impostazione predefinita? –

+0

@Jeff Yupp, hai ragione ... –

+0

Non vedo il punto nel farlo. Forse capire perché vuoi farlo in questo modo aiuterebbe a capire come risolvere il tuo problema. –

risposta

21

A seconda di cosa si intende per dichiarando, si può provare a utilizzare object literals in un array literal:

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

EDIT: Se il vostro obiettivo è un array i cui undefined articoli sono letterali oggetto vuoto per impostazione predefinita, è possibile scrivere una piccola funzione di utilità:

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

Quindi utilizzare in questo modo:

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

O anche:

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

Naturalmente, l'assegnazione diretta per il valore di ritorno di getDefaultObjectAt() non funziona, quindi non si può scrivere:

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

o push, se è più avanti nel codice: sample.push ({}); – Omri

+0

@PrasathK, vuoi dire che stai popolando la tua matrice dinamicamente (ad esempio attraverso un ciclo)? Quindi dovresti seguire la risposta di Daniel e usare 'push()'. –

+0

@PrasathK, che downvote non è mio. Se ti capisco bene, il commento di Jeff Shaver sotto la tua domanda è giusto? –

70

Usa array.push() per aggiungere un elemento alla fine dell'array.

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

Per fare questo n volte usano un ciclo for.

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

Nota che si può anche sostituire con new Array()[] e new Object() con {} quindi diventa:

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

Prova questo-

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

Questo rende un solo elemento un oggetto. Voglio che tutti i miei elementi siano un oggetto –

9

non si ha realmente bisogno per creare vuoti Object s mai. Non puoi fare nulla con loro. Basta aggiungere i tuoi oggetti di lavoro al campione, se necessario. Usa push come suggerito da Daniel Imms e usa letterali come suggerito da Frédéric Hamidi. Lei sembra voler programmare Javascript come 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. */ 

Credo utilizzando new Array(10) crea una matrice con 10 undefined elementi.

10

Dopo aver visto come hai risposto nei commenti. Sembra che sarebbe meglio usare push come altri hanno suggerito. In questo modo non è necessario conoscere gli indici, ma è comunque possibile aggiungere all'array.

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

In questo caso, ogni volta che si utilizza quella funzione, si invierà un nuovo oggetto nell'array.

+0

Oh dio .. ho più di 100 variabili in quegli oggetti e per ogni oggetto o chiamata della funzione devo inizializzare alcuni valori per alcune variabili all'inizio della funzione –

+0

grazie per la risposta :) –

5

Well array.length dovrebbe fare il trucco o no? qualcosa di simile, voglio dire che non è necessario conoscere la gamma di indice se hai appena letto esso ..

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

Forse non ho capito la tua domanda in modo corretto, ma si dovrebbe essere in grado di ottenere la lunghezza del tuo Array in questo modo e trasformandoli in oggetti. Daniel ha dato la stessa risposta ad essere onesti. Potresti semplicemente salvare la lunghezza dell'array nella sua variabile e sarebbe fatto.

SE e questo non dovrebbe accadere a mio parere non è possibile ottenere la lunghezza del vostro array. Come ha detto w/o ricevendo il numero di indice che si possa fare in questo modo:

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

E 'il non-bella versione di quello sopra, ma il ciclo eseguirebbe fino a "run" di fuori del campo di indice .

5

È possibile creare un'istanza di una serie di "tipo di oggetto" in una riga come questa (basta sostituire new Object() con l'oggetto):

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

Cosa succede se non conosco il valore degli elementi? –

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

No. Si tratta di un array non vuoto di ** un ** oggetto. – Quentin

+0

Benvenuti in Stack Overflow! Anche se questo snippet di codice può risolvere la domanda, [inclusa una spiegazione] (// meta.stackexchange.com/questions/114762/explaining-entely-code-based-answers) aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro, e queste persone potrebbero non conoscere le ragioni del tuo suggerimento sul codice. Cerca anche di non affollare il tuo codice con commenti esplicativi, questo riduce la leggibilità sia del codice che delle spiegazioni! – kayess

1

È possibile utilizzare fill() poi map. È pulito, elegante e auto esplicativo.

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

Creerà un array di 5 oggetti di stringa (non stringa!). Quindi è possibile utilizzare forEach per esempio.

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

La risposta a questa domanda è a mio parere inutilmente prolisso. Quindi spero che questo sia utile per alcuni di voi.

+0

@melpomene la modifica funziona – Ced

+0

@melpomene Posso chiederti come mai hai visto il mio post? Voglio dire, è un post piuttosto vecchio e hai un alto rappresentante, quindi dubito che tu stia cercando l'argomento. – Ced

+0

Mi è capitato di vederlo in prima pagina subito dopo aver postato. Ha attirato la mia attenzione perché era una domanda così vecchia con una nuova risposta. – melpomene

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

Questo esempio funziona con me. Snapshot for the Output on Browser Console

2

Utilizzare array.push() per aggiungere un elemento alla fine dell'array.

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

è possibile utilizzarlo

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

Usando forEach possiamo memorizzare i dati nel caso in cui abbiamo già dei dati che vogliamo fare un po 'di login affari sui dati.

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

esempio utilizzando semplice ciclo for

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