někdy budete muset iterovat přes objekt v JavaScriptu načíst více párů klíč-hodnota. V tomto článku se podíváme na čtyři různé způsoby opakování vlastností objektu v JavaScriptu.
před ES6, jediný způsob, jak smyčku přes objekt byl for…in smyčka. V ES6 byla zavedena metoda Object.keys()
, která usnadňuje iteraci nad objekty. Později v ES8 byly přidány dvě nové metody, Object.entries()
a Object.values()
. Nejnovější metody převádějí objekt na pole a poté používají metody opakování pole k iteraci přes toto pole.
začněme první metodou!
for…in smyčka
nejjednodušší a nejjednodušší způsob iterace nad vlastnostmi objektu je pomocí příkazu for...in
. Tato metoda funguje ve všech moderních i starých prohlížečích, včetně aplikace Internet Explorer 6 a vyšší.
zde je příklad, který používá smyčku for...in
pro iteraci nad objektem:
const user = { name: 'John Doe', email: '[email protected]', age: 25, dob: '08/02/1989', active: true};// iterate over the user objectfor (const key in user) { console.log(`${key}: ${user}`);}// name: John Doe// email: [email protected]// age: 25// dob: 08/02/1989// active: true
problém s for...in
smyčka je, že to iteruje vlastnosti v řetězci prototypu, stejně. Vzhledem k tomu, že objekty v JavaScriptu mohou zdědit vlastnosti z jejich prototypů, příkaz fo...in
bude procházet i těmito vlastnostmi.
Chcete-li se vyhnout opakování vlastností prototypu při opakování objektu, musíte explicitně zkontrolovat, zda vlastnost patří k objektu pomocí metody hasOwnProperty()
:
for (const key in user) { if (user.hasOwnProperty(key)) { console.log(`${key}: ${user}`); }}
Naštěstí, jsme již nebudou muset spoléhat na for...in
hasOwnProperty()
metoda procházet objekt. K dispozici jsou lepší způsoby.
objekt.keys () metoda
Object.keys()
metoda byla zavedena v ES6. Vezme objekt, který chcete iterovat, jako argument a vrátí pole obsahující všechny názvy vlastností(nebo klíče).
pak můžete použít kteroukoli z metod opakování pole, například forEach (), k iteraci přes pole a načtení hodnoty každé vlastnosti.
zde je příklad:
const courses = { java: 10, javascript: 55, nodejs: 5, php: 15};// convert object to key's arrayconst keys = Object.keys(courses);// print all keysconsole.log(keys);// // iterate over objectkeys.forEach((key, index) => { console.log(`${key}: ${courses}`);});// java: 10// javascript: 55// nodejs: 5// php: 15
ve výše uvedené deklaraci funkce jsem použil syntaxi ES6. Předpokládám, že již znáte ES6, zejména funkce šipek. Pokud jste v ES6 nováčkem, podívejte se na Průvodce funkcemi šipky a dozvíte se o tom.
objekt.hodnoty () metoda
objekt.metoda values () byla zavedena v ES8 a dělá opak Object.key()
. Vrací hodnoty všech vlastností v objektu jako pole. Poté můžete procházet polem hodnot pomocí kterékoli z metod opakování pole.
podívejme se na příklad:
const animals = { tiger: '🐅', cat: '🐱', monkey: '🐒', elephant: '🐘'};// iterate over object valuesObject.values(animals).forEach(val => console.log(val));// 🐅// 🐱// 🐒// 🐘
objekt.položky () metoda
objekt.entries () je další metoda, která byla zavedena v ES8 a může být použita pro procházení objektu. Na rozdíl od Object.values()
, který vytváří pole hodnot v objektu,Object.entries()
vytváří pole polí. Každé vnitřní pole má dva prvky. První prvek je vlastnost; druhý prvek je hodnota.
zde je příklad:
const animals = { tiger: '🐅', cat: '🐱', monkey: '🐒', elephant: '🐘'};const entries = Object.entries(animals);console.log(entries);// ,// ,// ,// ]
Chcete-li iterovat přes pole vrácené Object.entries()
, můžete použít pro…metody foreach (), jak je uvedeno níže:
// `for...of` loopfor (const of Object.entries(animals)) { console.log(`${key}: ${value}`);}// `forEach()` methodObject.entries(animals).forEach(() => { console.log(`${key}: ${value}`)});
závěr
to je vše pro iteraci nad vlastnostmi objektu v JavaScriptu. Podívali jsme se na čtyři různé metody, jak tento úkol splnit. for...in
je stále dobrá volba, pokud chcete podporovat staré prohlížeče. Jinak stačí použít některý z nejnovějších metod: Object.keys()
Object.values()
nebo Object.entries()
.
Like Like Líbí se vám tento článek? Sledujte @attacomsian na Twitteru. Můžete mě také sledovat na LinkedIn a DEV. Přihlásit se k odběru RSS Feed.
If pokud vás baví čtení mých článků a chcete mě podpořit, abych pokračoval ve vytváření bezplatných výukových programů, Buy kupte mi kávu (cena $5) .