Saya memiliki variabel yang merupakan sebuah array dan saya ingin setiap elemen dari array tersebut bertindak sebagai objek secara default. Untuk mencapai ini, saya dapat melakukan sesuatu seperti ini di kode saya.
var sample = new Array();
sample[0] = new Object();
sample[1] = new Object();
Ini berfungsi dengan baik, tetapi saya tidak ingin menyebutkan nomor indeks apa pun. Saya ingin semua elemen array saya menjadi objek. Bagaimana cara mendeklarasikan atau menginisialisasinya?
var sample = new Array();
sample[] = new Object();
Saya mencoba kode di atas tetapi tidak berhasil. Bagaimana cara menginisialisasi larik objek tanpa menggunakan nomor indeks?
javascript
arrays
object
declare
Prasath K
sumber
sumber
array.push(objYouWant )
di dalam fungsi pasti akan menjadi solusinya. Dengan begitu, setiap kali fungsi dijalankan, ia menambahkan objek baru dengan properti apa pun yang Anda inginkan.Jawaban:
Gunakan
array.push()
untuk menambahkan item ke akhir larik.var sample = new Array(); sample.push(new Object());
Untuk melakukan
n
kali ini gunakanfor
loop.var n = 100; var sample = new Array(); for (var i = 0; i < n; i++) sample.push(new Object());
Perhatikan bahwa Anda juga dapat mengganti
new Array()
dengan[]
dannew Object()
dengan{}
sehingga menjadi:var n = 100; var sample = []; for (var i = 0; i < n; i++) sample.push({});
sumber
Bergantung pada apa yang Anda maksud dengan mendeklarasikan , Anda dapat mencoba menggunakan literal objek dalam literal array :
var sample = [{}, {}, {} /*, ... */];
EDIT: Jika tujuan Anda adalah larik yang
undefined
itemnya adalah literal objek kosong secara default, Anda dapat menulis fungsi utilitas kecil:function getDefaultObjectAt(array, index) { return array[index] = array[index] || {}; }
Kemudian gunakan seperti ini:
var sample = []; var obj = getDefaultObjectAt(sample, 0); // {} returned and stored at index 0.
Atau bahkan:
getDefaultObjectAt(sample, 1).prop = "val"; // { prop: "val" } stored at index 1.
Tentu saja, penetapan langsung ke nilai kembalian
getDefaultObjectAt()
tidak akan berfungsi, jadi Anda tidak dapat menulis:getDefaultObjectAt(sample, 2) = { prop: "val" };
sumber
push()
.Anda dapat menggunakan 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 }));
Akan membuat array 5 item. Kemudian Anda dapat menggunakan forEach sebagai contoh.
arr.forEach(str => console.log(str));
Perhatikan bahwa saat melakukan
new Array(5)
itu hanya sebuah objek dengan panjang 5 dan arraynya kosong. Saat Anda menggunakannya,fill()
Anda mengisi setiap tempat dengan apa pun yang Anda inginkan.sumber
Setelah melihat bagaimana Anda menanggapi di komentar. Sepertinya akan lebih baik jika digunakan
push
seperti yang disarankan orang lain. Dengan cara ini Anda tidak perlu mengetahui indeksnya, tetapi Anda masih bisa menambahkan ke array.var arr = []; function funcInJsFile() { // Do Stuff var obj = {x: 54, y: 10}; arr.push(obj); }
Dalam hal ini, setiap kali Anda menggunakan fungsi itu, itu akan mendorong objek baru ke dalam larik.
sumber
Anda tidak perlu
Object
pernah membuat kosong . Anda tidak dapat melakukan apapun dengan mereka. Cukup tambahkan objek kerja Anda ke sampel sesuai kebutuhan. Gunakanpush
seperti yang disarankan Daniel Imms, dan gunakan literal seperti yang disarankan Frédéric Hamidi. Anda sepertinya ingin memprogram Javascript seperti 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. */
Saya percaya menggunakan
new Array(10)
membuat array dengan 10undefined
elemen.sumber
Anda dapat membuat instance larik "tipe objek" dalam satu baris seperti ini (cukup ganti Object () baru dengan objek Anda):
var elements = 1000; var MyArray = Array.apply(null, Array(elements)).map(function () { return new Object(); });
sumber
Nah
array.length
harus melakukan trik atau tidak? sesuatu seperti, maksud saya Anda tidak perlu mengetahui kisaran indeks jika Anda hanya membacanya ..var arrayContainingObjects = []; for (var i = 0; i < arrayContainingYourItems.length; i++){ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; }
Mungkin saya tidak memahami Pertanyaan Anda dengan benar, tetapi Anda harus bisa mendapatkan panjang Array Anda dengan cara ini dan mengubahnya menjadi objek. Sejujurnya Daniel memberikan jawaban yang sama. Anda bisa menyimpan panjang array Anda ke variabelnya dan itu akan selesai.
JIKA dan ini seharusnya tidak terjadi menurut saya, Anda tidak bisa mendapatkan panjang Array Anda. Seperti yang Anda katakan tanpa mendapatkan nomor indeks, Anda dapat melakukannya seperti ini:
var arrayContainingObjects = []; for (;;){ try{ arrayContainingObjects.push {(property: arrayContainingYourItems[i])}; } } catch(err){ break; }
Ini adalah versi yang tidak bagus dari yang di atas tetapi loop akan dieksekusi sampai Anda "kehabisan" rentang indeks.
sumber
Coba ini-
var arr = []; arr.push({});
sumber
//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);
Contoh Ini Bekerja dengan Saya. Snapshot untuk Output di Konsol Browser
sumber
Gunakan array.push () untuk menambahkan item ke akhir array.
var sample = new Array(); sample.push(new Object());
kamu bisa menggunakannya
var x = 100; var sample = []; for(let i=0; i<x ;i++){ sample.push({}) OR sample.push(new Object()) }
sumber
Dengan menggunakan forEach kita dapat menyimpan data jika kita sudah memiliki data, kita ingin melakukan login bisnis pada data.
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);
Contoh dengan menggunakan simple for loop
var data = []; for(var i = 0 ; i < 10 ; i++){ data.push(i); } document.write(data);
sumber
Jika Anda ingin semua elemen di dalam array menjadi objek, Anda dapat menggunakan JavaScript Proxy untuk menerapkan validasi pada objek sebelum Anda memasukkannya ke dalam array. Ini cukup sederhana,
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'); } } });
Sekarang jika Anda mencoba melakukan sesuatu seperti ini:
arr[0] = 'Hello World'; // Error
Ini akan menimbulkan kesalahan. Namun jika Anda memasukkan sebuah objek, itu akan diizinkan:
arr[0] = {}; // Allowed
Untuk detail lebih lanjut tentang Proxies, silakan merujuk ke tautan ini: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
Jika Anda mencari implementasi polyfill, Anda dapat melihat tautan ini: https://github.com/GoogleChrome/proxy-polyfill
sumber
Kode di bawah ini dari proyek saya mungkin baik untuk Anda
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 }); }
sumber
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;
Siapapun mencoba ini .. dan menyarankan sesuatu.
sumber
var ArrayofObjects = [{}]; //An empty array of objects.
sumber