Mam zmienną, która jest tablicą i chcę, aby każdy element tablicy działał domyślnie jako obiekt. Aby to osiągnąć, mogę zrobić coś takiego w moim kodzie.
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Działa to dobrze, ale nie chcę wspominać o żadnym numerze indeksu. Chcę, aby wszystkie elementy mojej tablicy były obiektami. Jak to zadeklarować lub zainicjować?
var sample = new Array();
sample[] = new Object();
Wypróbowałem powyższy kod, ale nie działa. Jak zainicjować tablicę obiektów bez użycia numeru indeksu?
javascript
arrays
object
declare
Prasath K.
źródło
źródło
array.push(objYouWant )
wewnątrz funkcji zdecydowanie byłaby rozwiązaniem, dlatego za każdym razem, gdy funkcja jest uruchamiana, dodaje nowy obiekt o dowolnych właściwościach.Odpowiedzi:
Służy
array.push()
do dodawania elementu na końcu tablicy.var sample = new Array(); sample.push(new Object());
Aby to zrobić,
n
użyjfor
pętli.var n = 100; var sample = new Array(); for (var i = 0; i < n; i++) sample.push(new Object());
Należy pamiętać, że można również zastąpić
new Array()
z[]
inew Object()
z{}
tak staje się:var n = 100; var sample = []; for (var i = 0; i < n; i++) sample.push({});
źródło
W zależności od tego, co masz na myśli przez deklarując , można spróbować użyć literałów obiektów w dosłownym tablicy :
var sample = [{}, {}, {} /*, ... */];
EDYCJA: Jeśli Twoim celem jest tablica, której
undefined
elementy są domyślnie pustymi literałami obiektów, możesz napisać małą funkcję użytkową:function getDefaultObjectAt(array, index) { return array[index] = array[index] || {}; }
Następnie użyj tego w ten sposób:
var sample = []; var obj = getDefaultObjectAt(sample, 0); // {} returned and stored at index 0.
Lub nawet:
getDefaultObjectAt(sample, 1).prop = "val"; // { prop: "val" } stored at index 1.
Oczywiście bezpośrednie przypisanie do zwracanej wartości
getDefaultObjectAt()
nie zadziała, więc nie możesz napisać:getDefaultObjectAt(sample, 2) = { prop: "val" };
źródło
push()
.Możesz użyć 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 }));
Stworzy tablicę składającą się z 5 elementów. Następnie możesz użyć na przykład forEach.
arr.forEach(str => console.log(str));
Zwróć uwagę, że robiąc
new Array(5)
to jest to tylko obiekt o długości 5, a tablica jest pusta. Kiedy używaszfill()
, wypełniasz każde miejsce, czym chcesz.źródło
Po zobaczeniu, jak odpowiedziałeś w komentarzach. Wygląda na to, że najlepiej będzie go używać
push
tak, jak sugerowali inni. W ten sposób nie musisz znać indeksów, ale nadal możesz dodawać do tablicy.var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); }
W takim przypadku za każdym razem, gdy użyjesz tej funkcji, wepchnie ona nowy obiekt do tablicy.
źródło
Tak naprawdę nie musisz
Object
nigdy tworzyć pustych znaków. Nie możesz z nimi nic zrobić. Po prostu dodaj obiekty robocze do próbki w razie potrzeby. Używajpush
zgodnie z sugestią Daniela Immsa i literałów, jak sugerował Frédéric Hamidi. Wydaje się, że chcesz zaprogramować Javascript jak 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. */
Uważam, że użycie
new Array(10)
tworzy tablicę z 10undefined
elementami.źródło
Możesz utworzyć instancję tablicy „typu obiektu” w jednej linii w ten sposób (po prostu zastąp new Object () swoim obiektem):
var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
źródło
Więc
array.length
powinno załatwić sprawę, czy nie? coś w rodzaju, mam na myśli, że nie musisz znać zakresu indeksu, jeśli tylko go przeczytasz ..var arrayContainingObjects = []; for (var i = 0; i < arrayContainingYourItems.length; i++){ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; }
Być może nie zrozumiałem poprawnie Twojego pytania, ale powinieneś być w stanie uzyskać w ten sposób długość swojej tablicy i przekształcić ją w obiekty. Daniel jakby udzielił tej samej odpowiedzi, jeśli mam być szczery. Możesz po prostu zapisać długość swojej tablicy w jego zmiennej i będzie gotowe.
JEŚLI i to nie powinno, moim zdaniem, nie możesz uzyskać swojej długości tablicy. Jak powiedziałeś bez uzyskania numeru indeksu, możesz to zrobić w następujący sposób:
var arrayContainingObjects = []; for (;;){ try{ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } } catch(err){ break; }
Jest to niezbyt przyjemna wersja powyższej, ale pętla byłaby wykonywana, dopóki nie „wyjdziesz” poza zakres indeksu.
źródło
Spróbuj tego-
var arr = []; arr.push({});
źródło
//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);
Ten przykład działa ze mną. Migawka dla danych wyjściowych w konsoli przeglądarki
źródło
Użyj array.push (), aby dodać element na końcu tablicy.
var sample = new Array(); sample.push(new Object());
możesz tego użyć
var x = 100; var sample = []; for(let i=0; i<x ;i++){ sample.push({}) OR sample.push(new Object()) }
źródło
Korzystając z forEach, możemy przechowywać dane w przypadku, gdy mamy już dane, dla których chcemy wykonać logowanie biznesowe na danych.
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);
Przykład z użyciem prostej pętli for
var data = []; for(var i = 0 ; i < 10 ; i++){ data.push(i); } document.write(data);
źródło
Jeśli chcesz, aby wszystkie elementy wewnątrz tablicy były obiektami, możesz użyć JavaScript Proxy, aby zastosować walidację obiektów przed wstawieniem ich do tablicy. To całkiem proste,
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'); } } });
Teraz, jeśli spróbujesz zrobić coś takiego:
arr[0] = 'Hello World'; // Error
Wystąpi błąd. Jeśli jednak wstawisz obiekt, będzie to dozwolone:
arr[0] = {}; // Allowed
Więcej informacji na temat serwerów proxy można znaleźć pod tym linkiem: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Jeśli szukasz implementacji polyfill, możesz sprawdzić ten link: https://github.com/GoogleChrome/proxy-polyfill
źródło
Poniższy kod z mojego projektu może być dla Ciebie dobry
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 }); }
źródło
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;
Każdy spróbuje tego… i coś zasugeruje.
źródło
var ArrayofObjects = [{}]; //An empty array of objects.
źródło