Eu tenho uma variável que é uma matriz e quero que cada elemento da matriz atue como um objeto por padrão. Para conseguir isso, posso fazer algo assim no meu código.
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Isso funciona bem, mas não quero mencionar nenhum número de índice. Eu quero que todos os elementos do meu array sejam um objeto. Como declaro ou inicializo?
var sample = new Array();
sample[] = new Object();
Tentei o código acima, mas não funciona. Como inicializo uma matriz de objetos sem usar um número de índice?
javascript
arrays
object
declare
Prasath K
fonte
fonte
array.push(objYouWant )
dentro da função seria definitivamente a solução. Dessa forma, cada vez que a função é executada, ela adiciona um novo objeto com as propriedades que você deseja.Respostas:
Use
array.push()
para adicionar um item ao final da matriz.var sample = new Array(); sample.push(new Object());
Para fazer isso
n
, use umfor
loop.var n = 100; var sample = new Array(); for (var i = 0; i < n; i++) sample.push(new Object());
Observe que você também pode substituir
new Array()
por[]
enew Object()
por{}
isso se torna:var n = 100; var sample = []; for (var i = 0; i < n; i++) sample.push({});
fonte
Dependendo do que você entende por declarar , você pode tentar usar literais de objeto em um literal de matriz :
var sample = [{}, {}, {} /*, ... */];
EDITAR: Se sua meta é uma matriz cujos
undefined
itens são literais de objetos vazios por padrão, você pode escrever uma pequena função de utilidade:function getDefaultObjectAt(array, index) { return array[index] = array[index] || {}; }
Em seguida, use-o assim:
var sample = []; var obj = getDefaultObjectAt(sample, 0); // {} returned and stored at index 0.
Ou ainda:
getDefaultObjectAt(sample, 1).prop = "val"; // { prop: "val" } stored at index 1.
Claro, a atribuição direta ao valor de retorno de
getDefaultObjectAt()
não funcionará, então você não pode escrever:getDefaultObjectAt(sample, 2) = { prop: "val" };
fonte
push()
.Você pode 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 }));
Irá criar uma matriz de 5 itens. Então você pode usar forEach, por exemplo.
arr.forEach(str => console.log(str));
Observe que, ao fazer
new Array(5)
isso, é apenas um objeto com comprimento 5 e o array está vazio. Quando você usa,fill()
você preenche cada local individual com o que quiser.fonte
Depois de ver como você respondeu nos comentários. Parece que seria melhor usar
push
como outros sugeriram. Dessa forma, você não precisa saber os índices, mas ainda pode adicioná-los ao array.var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); }
Nesse caso, toda vez que você usar essa função, ela enviará um novo objeto para o array.
fonte
Você realmente não precisa criar
Object
s em branco nunca. Você não pode fazer nada com eles. Basta adicionar seus objetos de trabalho à amostra conforme necessário. Usepush
como Daniel Imms sugeriu e use literais como sugeriu Frédéric Hamidi. Você parece querer 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. */
Acredito que o uso de
new Array(10)
cria um array com 10undefined
elementos.fonte
Você pode instanciar uma matriz de "tipo de objeto" em uma linha como esta (apenas substitua new Object () pelo seu objeto):
var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
fonte
Bem,
array.length
deve fazer o truque ou não? algo como, quero dizer, você não precisa saber o intervalo do índice se apenas lê-lo ..var arrayContainingObjects = []; for (var i = 0; i < arrayContainingYourItems.length; i++){ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; }
Talvez eu não tenha entendido sua pergunta corretamente, mas você deve ser capaz de obter o comprimento de seu Array dessa forma e transformá-los em objetos. Daniel meio que deu a mesma resposta para ser honesto. Você poderia simplesmente salvar o comprimento do seu array na variável dele e pronto.
SE e isso não deveria acontecer na minha opinião, você não pode obter o comprimento do seu Array. Como você disse, sem obter o número do índice, você poderia fazer assim:
var arrayContainingObjects = []; for (;;){ try{ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } } catch(err){ break; }
É a versão não legal da anterior, mas o loop seria executado até que você "executasse" fora do intervalo do índice.
fonte
Tente isto-
var arr = []; arr.push({});
fonte
//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 exemplo funciona comigo. Instantâneo para a saída no console do navegador
fonte
Use array.push () para adicionar um item ao final do array.
var sample = new Array(); sample.push(new Object());
você pode usar isso
var x = 100; var sample = []; for(let i=0; i<x ;i++){ sample.push({}) OR sample.push(new Object()) }
fonte
Usando forEach podemos armazenar dados caso já tenhamos dados que desejamos fazer algum login de negócios nos dados.
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);
Exemplo usando loop for simples
var data = []; for(var i = 0 ; i < 10 ; i++){ data.push(i); } document.write(data);
fonte
Se você deseja que todos os elementos dentro de um array sejam objetos, você pode usar o JavaScript Proxy para aplicar uma validação nos objetos antes de inseri-los em um array. É bem simples,
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'); } } });
Agora, se você tentar fazer algo assim:
arr[0] = 'Hello World'; // Error
Isso gerará um erro. No entanto, se você inserir um objeto, ele será permitido:
arr[0] = {}; // Allowed
Para obter mais detalhes sobre Proxies, consulte este link: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Se você estiver procurando por uma implementação de polyfill, pode verificar este link: https://github.com/GoogleChrome/proxy-polyfill
fonte
O código abaixo do meu projeto talvez seja bom para você
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 }); }
fonte
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;
Alguém tente isso .. e sugira algo.
fonte
var ArrayofObjects = [{}]; //An empty array of objects.
fonte