95 votes

Déclarer un tableau d'objets

J'ai une variable qui est un tableau et je veux que chaque élément du tableau agisse comme un objet par défaut. Pour y parvenir, je peux faire quelque chose comme ceci dans mon code.

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

Cela fonctionne bien, mais je ne veux pas mentionner de numéro d'index. Je veux que tous les éléments de mon tableau soient des objets. Comment puis-je le déclarer ou l'initialiser ?

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

J'ai essayé le code ci-dessus mais il ne fonctionne pas. Comment initialiser un tableau d'objets sans utiliser de numéro d'index ?

93voto

Daniel Imms Points 16273

Utilice array.push() pour ajouter un élément à la fin du tableau.

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

Pour ce faire n fois utiliser un for boucle.

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

Notez que vous pouvez également remplacer new Array() con [] y new Object() con {} alors ça devient :

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

44voto

Frédéric Hamidi Points 123646

Selon ce que vous entendez par en déclarant vous pouvez essayer d'utiliser littéraux d'objets dans un tableau littéral :

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

EDIT : Si votre objectif est un tableau dont undefined sont des littéraux d'objet vides par défaut, vous pouvez écrire une petite fonction utilitaire :

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

Alors utilisez-le comme ceci :

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

Ou même :

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

Bien sûr, l'affectation directe à la valeur de retour de la fonction getDefaultObjectAt() ne fonctionnera pas, et vous ne pourrez pas écrire :

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

32voto

Ced Points 6385

Vous pouvez utiliser remplir() .

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

Crée un tableau de 5 éléments. Vous pouvez alors utiliser forEach par exemple.

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

Notez que lorsque vous faites new Array(5) c'est juste un objet de longueur 5 et le tableau est vide. Lorsque vous utilisez fill() vous remplissez chaque emplacement individuel avec ce que vous voulez.

12voto

Jeff Shaver Points 3115

Après avoir vu comment vous avez répondu dans les commentaires. Il semble que ce serait mieux d'utiliser push comme d'autres l'ont suggéré. De cette façon, vous n'avez pas besoin de connaître les indices, mais vous pouvez toujours ajouter des éléments au tableau.

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

Dans ce cas, chaque fois que vous utiliserez cette fonction, elle placera un nouvel objet dans le tableau.

11voto

Eric Jablow Points 4385

Vous n'avez pas vraiment besoin de créer des blancs Object jamais. Tu ne peux rien faire avec eux. Ajoutez simplement vos objets de travail à l'échantillon si nécessaire. Utilisez push comme Daniel Imms l'a suggéré, et utiliser les littéraux comme Frédéric Hamidi l'a suggéré. Vous semblez vouloir programmer Javascript comme 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. */

Je crois qu'utiliser new Array(10) crée un tableau de 10 undefined éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X