Mari kita berpaling dari struktur data individual dan membahas iterasi mereka.
Di bab sebelumnya kita telah melihat method map.keys()
, map.values()
, map.entries()
.
Method ini generik, ada persetujuan umum untuk menggunakan mereka untuk struktur data. Jika kita pernah menciptakan struktur data sendiri, kita harus mengimplementasikannya juga.
Mereka tersedia untuk:
Map
Set
Array
Objek biasa juga menghadapi method yang mirip, tapi sintaksisnya sedikit berbeda.
Objek.kunci, nilai-nilai, entri-entri
Untuk objek biasa, method berikut tersedia:
- Object.keys(obj) – mengembalikan array kunci.
- Object.values(obj) – mengembalikan array nilai.
- Object.entries(obj) – mengembalikan array pasangan
[key, value]
.
Perhatikanlah perbedaannya(dibanding map contohnya):
Map | Object | |
---|---|---|
Call syntax | map.keys() |
Object.keys(obj) , but not obj.keys() |
Returns | iterable | “real” Array |
Perbedaan pertama adalah kita harus memanggil Object.keys(obj)
, bukan obj.keys()
.
Mengapa? Alasan pertama adalah fleksibilitas. Ingat, objek adalah dasar dari struktur kompleks di Javascript. Jadi kita mungkin mempunyai objek seperti data
yang mengimplemen method data.values()
sendirinya. Dan kita masih bisa memanggil Object.values(data)
atasnya.
Alasan kedua adalah method Object.*
mengembalikan objek array “betulan”, bukan hanya iterable. Itu terutama untuk alasan-alasan historis.
Contohnya:
let user = {
name: "John",
age: 30
};
Object.keys(user) = ["name", "age"]
Object.values(user) = ["John", 30]
Object.entries(user) = [ ["name","John"], ["age",30] ]
Ini adalah contoh pengunaan Object.values
untuk meng-loop atas nilai-nilai properti:
let user = {
name: "John",
age: 30
};
// loop atas nilai
for (let value of Object.values(user)) {
alert(value); // John, then 30
}
Seperti for..in
loop, method ini mengabaikan properti yang menggunakan Symbol(...)
as keys.
Biasanya itu mudah. Tapi jika kita mau kunci simbolis juga, ada method lain Object.getOwnPropertySymbols yang mengembalikan array berisi kunci simbolis saja. Ada juga method Reflect.ownKeys(obj) yang mengembalikan semua kunci.
Mengubah objek
Objek kekurangan banyak method yang ada untuk arrays, contoh map
, filter
dan yang lainnya.
Jika kita ingin mengapplikasikan method-method tersebut, kita bisa menggunakan Object.entries
diikuti oleh Object.fromEntries
:
- Gunakan
Object.entries(obj)
untuk mendapatkan array pasangan kunci/nilai dariobj
. - Gunakan method array di array tersebut, contoh
map
. - Gunakan
Object.fromEntries(array)
di array hasil untuk mengubahnya kembali menjadi objek.
Sebagai contoh, kita mempunyai objek dengan harga-harga, dan mau melipat duakan harga-harganya:
let prices = {
banana: 1,
orange: 2,
meat: 4,
};
let doublePrices = Object.fromEntries(
// ubah menjadi array, map, lalu fromEntries mengembalikan objeknya
Object.entries(prices).map(([key, value]) => [key, value * 2])
);
alert(doublePrices.meat); // 8
Mungkin ini terlihat susah pertama kalinya, tetapi ini akan menjadi mudah untuk di mengerti setelah kamu menggunakannya beberapa kali. Kita bisa membuat perantaian hebat dengan cara ini.
komentar
<code>
, untuk beberapa baris – bungkus dengan tag<pre>
, untuk lebih dari 10 baris – gunakan sandbox (plnkr, jsbin, < a href='http://codepen.io'>codepen…)