Tengo una variable que es una matriz y quiero que cada elemento de la matriz actúe como un objeto de forma predeterminada. Para lograr esto, puedo hacer algo como esto en mi código.
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Esto funciona bien, pero no quiero mencionar ningún número de índice. Quiero que todos los elementos de mi matriz sean un objeto. ¿Cómo lo declaro o lo inicializo?
var sample = new Array();
sample[] = new Object();
Probé el código anterior pero no funciona. ¿Cómo inicializo una matriz de objetos sin usar un número de índice?
javascript
arrays
object
declare
Prasath K
fuente
fuente
array.push(objYouWant )
dentro de la función definitivamente sería la solución, de esa manera cada vez que se ejecuta la función, agrega un nuevo objeto con las propiedades que desee.Respuestas:
Úselo
array.push()
para agregar un elemento al final de la matriz.var sample = new Array(); sample.push(new Object());
Para hacer esto
n
, usa unfor
bucle.var n = 100; var sample = new Array(); for (var i = 0; i < n; i++) sample.push(new Object());
Tenga en cuenta que también puede sustituir
new Array()
con[]
ynew Object()
con{}
para que se convierta en:var n = 100; var sample = []; for (var i = 0; i < n; i++) sample.push({});
fuente
Dependiendo de lo que quiera decir con la declaración , puede intentar usar literales de objeto en una matriz literal :
var sample = [{}, {}, {} /*, ... */];
EDITAR: Si su objetivo es una matriz cuyos
undefined
elementos son literales de objetos vacíos de forma predeterminada, puede escribir una pequeña función de utilidad:function getDefaultObjectAt(array, index) { return array[index] = array[index] || {}; }
Entonces úsalo así:
var sample = []; var obj = getDefaultObjectAt(sample, 0); // {} returned and stored at index 0.
O incluso:
getDefaultObjectAt(sample, 1).prop = "val"; // { prop: "val" } stored at index 1.
Por supuesto, la asignación directa al valor de retorno de
getDefaultObjectAt()
no funcionará, por lo que no puede escribir:getDefaultObjectAt(sample, 2) = { prop: "val" };
fuente
push()
.Puede usar 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 }));
Creará una matriz de 5 elementos. Entonces puedes usar forEach por ejemplo.
arr.forEach(str => console.log(str));
Tenga en cuenta que al hacerlo
new Array(5)
, es solo un objeto con una longitud de 5 y la matriz está vacía. Cuando lo usafill()
, llena cada lugar individual con lo que quiera.fuente
Después de ver cómo respondiste en los comentarios. Parece que sería mejor utilizarlo
push
como han sugerido otros. De esta manera, no necesita conocer los índices, pero aún puede agregar a la matriz.var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); }
En este caso, cada vez que use esa función, insertará un nuevo objeto en la matriz.
fuente
Realmente no es necesario crear
Object
nunca s en blanco . No puedes hacer nada con ellos. Simplemente agregue sus objetos de trabajo a la muestra según sea necesario. Usepush
como sugirió Daniel Imms, y use literales como sugirió Frédéric Hamidi. Parece que desea programar Javascript como 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. */
Creo que el uso
new Array(10)
crea una matriz con 10undefined
elementos.fuente
Puede crear una instancia de una matriz de "tipo de objeto" en una línea como esta (simplemente reemplace new Object () con su objeto):
var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
fuente
Bueno
array.length
, ¿debería hacer el truco o no? algo como, quiero decir que no necesitas saber el rango del índice si lo lees.var arrayContainingObjects = []; for (var i = 0; i < arrayContainingYourItems.length; i++){ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; }
Tal vez no entendí correctamente su pregunta, pero debería poder obtener la longitud de su matriz de esta manera y transformarla en objetos. Daniel dio la misma respuesta para ser honesto. Puede guardar la longitud de su matriz en su variable y estará listo.
SI y esto no debería suceder, en mi opinión, no puede obtener su longitud de matriz. Como dijiste, sin obtener el número de índice, podrías hacerlo así:
var arrayContainingObjects = []; for (;;){ try{ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } } catch(err){ break; }
Es la versión no agradable de la anterior, pero el bucle se ejecutaría hasta que "salga" del rango del índice.
fuente
Prueba esto-
var arr = []; arr.push({});
fuente
//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);
Este ejemplo funciona conmigo. Instantánea de la salida en la consola del navegador
fuente
Utilice array.push () para agregar un elemento al final de la matriz.
var sample = new Array(); sample.push(new Object());
puedes usarlo
var x = 100; var sample = []; for(let i=0; i<x ;i++){ sample.push({}) OR sample.push(new Object()) }
fuente
Usando forEach podemos almacenar datos en caso de que ya tengamos datos que queremos hacer un inicio de sesión comercial en los datos.
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);
Ejemplo usando un bucle for simple
var data = []; for(var i = 0 ; i < 10 ; i++){ data.push(i); } document.write(data);
fuente
Si desea que todos los elementos dentro de una matriz sean objetos, puede usar JavaScript Proxy para aplicar una validación en los objetos antes de insertarlos en una matriz. Es bastante 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'); } } });
Ahora, si intentas hacer algo como esto:
arr[0] = 'Hello World'; // Error
Lanzará un error. Sin embargo, si inserta un objeto, se le permitirá:
arr[0] = {}; // Allowed
Para obtener más detalles sobre los Proxies, consulte este enlace: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Si está buscando una implementación de polyfill, puede consultar este enlace: https://github.com/GoogleChrome/proxy-polyfill
fuente
El siguiente código de mi proyecto tal vez sea bueno para ti
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 }); }
fuente
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;
Cualquiera intente esto ... y sugiera algo.
fuente
var ArrayofObjects = [{}]; //An empty array of objects.
fuente