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 ça dans mon code.
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Cela fonctionne bien, mais je ne veux mentionner aucun numéro d'index. Je veux que tous les éléments de mon tableau soient un objet. Comment le déclarer ou l'initialiser?
var sample = new Array();
sample[] = new Object();
J'ai essayé le code ci-dessus mais cela ne fonctionne pas. Comment initialiser un tableau d'objets sans utiliser de numéro d'index?
javascript
arrays
object
declare
Prasath K
la source
la source
array.push(objYouWant )
à l'intérieur de la fonction serait certainement la solution. De cette façon, chaque fois que la fonction est exécutée, elle ajoute un nouvel objet avec les propriétés que vous voulez.Réponses:
Utilisez
array.push()
pour ajouter un élément à la fin du tableau.var sample = new Array(); sample.push(new Object());
Pour ce faire
n
, utilisez unefor
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()
par[]
etnew Object()
par{}
pour qu'il devienne:var n = 100; var sample = []; for (var i = 0; i < n; i++) sample.push({});
la source
Selon ce que vous entendez par déclaration , vous pouvez essayer d'utiliser des littéraux d'objet dans un littéral de tableau :
var sample = [{}, {}, {} /*, ... */];
EDIT: Si votre objectif est un tableau dont les
undefined
éléments sont des littéraux d'objets vides par défaut, vous pouvez écrire une petite fonction utilitaire:function getDefaultObjectAt(array, index) { return array[index] = array[index] || {}; }
Ensuite, 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
getDefaultObjectAt()
ne fonctionnera pas, vous ne pouvez donc pas écrire:getDefaultObjectAt(sample, 2) = { prop: "val" };
la source
push()
.Vous pouvez utiliser fill () .
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éera un tableau de 5 éléments. Ensuite, vous pouvez 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.la source
Après avoir vu comment vous avez répondu dans les commentaires. Il semble qu'il serait préférable de l'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 au tableau.var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); }
Dans ce cas, chaque fois que vous utilisez cette fonction, elle poussera un nouvel objet dans le tableau.
la source
Vous n'avez jamais vraiment besoin de créer des blancs
Object
. Vous ne pouvez rien faire avec eux. Ajoutez simplement vos objets de travail à l'échantillon si nécessaire. Utilisezpush
comme le suggère Daniel Imms et utilisez des littéraux comme le suggère Frédéric Hamidi. 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 que l'utilisation
new Array(10)
crée un tableau avec 10undefined
éléments.la source
Vous pouvez instancier un tableau de "type d'objet" sur une ligne comme ceci (remplacez simplement new Object () par votre objet):
var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
la source
Eh bien,
array.length
devrait faire l'affaire ou pas? quelque chose comme, je veux dire que vous n'avez pas besoin de connaître la plage d'index si vous venez de la lirevar arrayContainingObjects = []; for (var i = 0; i < arrayContainingYourItems.length; i++){ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; }
Peut-être que je n'ai pas bien compris votre question, mais vous devriez pouvoir obtenir la longueur de votre tableau de cette façon et les transformer en objets. Daniel a en quelque sorte donné la même réponse pour être honnête. Vous pouvez simplement enregistrer la longueur de votre tableau dans sa variable et ce serait fait.
SI et cela ne devrait pas arriver à mon avis, vous ne pouvez pas obtenir la longueur de votre tableau. Comme vous l'avez dit sans obtenir le numéro d'index, vous pouvez le faire comme ceci:
var arrayContainingObjects = []; for (;;){ try{ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } } catch(err){ break; }
C'est la version pas sympa de celle ci-dessus mais la boucle s'exécuterait jusqu'à ce que vous "couriez" hors de la plage d'index.
la source
Essaye ça-
var arr = []; arr.push({});
la source
//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);
Cet exemple fonctionne avec moi. Instantané de la sortie sur la console du navigateur
la source
Utilisez array.push () pour ajouter un élément à la fin du tableau.
var sample = new Array(); sample.push(new Object());
tu peux l'utiliser
var x = 100; var sample = []; for(let i=0; i<x ;i++){ sample.push({}) OR sample.push(new Object()) }
la source
En utilisant forEach, nous pouvons stocker des données au cas où nous aurions déjà des données, nous voulons faire une connexion professionnelle sur les données.
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);
Exemple en utilisant une boucle for simple
var data = []; for(var i = 0 ; i < 10 ; i++){ data.push(i); } document.write(data);
la source
Si vous souhaitez que tous les éléments d'un tableau soient des objets, vous pouvez utiliser le proxy JavaScript pour appliquer une validation sur les objets avant de les insérer dans un tableau. C'est assez simple,
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'); } } });
Maintenant, si vous essayez de faire quelque chose comme ça:
arr[0] = 'Hello World'; // Error
Cela lancera une erreur. Cependant si vous insérez un objet, il sera autorisé:
arr[0] = {}; // Allowed
Pour plus de détails sur les proxies, veuillez consulter ce lien: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Si vous recherchez une implémentation polyfill, vous pouvez consulter ce lien: https://github.com/GoogleChrome/proxy-polyfill
la source
Le code ci-dessous de mon projet est peut-être bon pour vous
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 }); }
la source
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;
Tout le monde essaie ceci ... et suggère quelque chose.
la source
var ArrayofObjects = [{}]; //An empty array of objects.
la source