Цикл for...in

Цикл for...in используется для перебора перечислимых свойств объектов и ключей ассоциативных массивов. Он имеет следующий формат:

for (<Переменная> in <Объект>) {
   <Тело цикла>
}

Цикл for...in на каждой итерации присваивает <Переменной> имя свойства объекта или ключа ассоциативного массива. Пример перебора свойств объекта приведен в листинге 4.7.

Листинг 4.7. Цикл for...in

const process = require('process');
let obj = { a: 10, b: 20 };
for (let prop in obj) {
   process.stdout.write(`${prop} `);
} // a b

При переборе ассоциативного массива с помощью ключа можно получить значение соответствующего элемента:

let arr = new Object();
arr['Один'] = 1;
arr['Два'] = 2;
arr['Три'] = 3;
for (let key in arr) {
   // Переменной key на каждой итерации присваивается
   // ключ текущего элемента ассоциативного массива
   console.log(`${key} = ${arr[key]}`);
}

В итоге мы получим следующий результат:

Один = 1
Два = 2
Три = 3

Следует учитывать, что порядок обхода является произвольным, поэтому перебирать обычные массивы, где порядок следования элементов важен, с помощью этого цикла не стоит.

Цикл for...in имеет доступ не только к свойствам текущего объекта, но и к унаследованным свойствам в цепочке прототипов. Если эти унаследованные свойства не нужны, то следует отфильтровать их с помощью метода hasOwnProperty():

let objA = { a: 10 };
let objB = { b: 55 };
Object.setPrototypeOf(objB, objA);
console.log(objB.a);  // 10
console.log(objB.b);  // 55
for (let prop in objB) {
   if ( objB.hasOwnProperty(prop) ) {
      console.log(`YES: ${prop}`);
   }
   else {
      console.log(`NO: ${prop}`);
   }
}
// YES: b
// NO: a

Обратите внимание: перебрать можно только перечислимые свойства, т. е. свойства для которых метод propertyIsEnumerable() из класса Object вернул значение true. Для свойств встроенных объектов метод возвращает false, поэтому перебрать свойства этих объектов с помощью цикла for...in нельзя.

Для быстрой вставки цикла for...in в редакторе VS Code, предназначена следующая комбинация:

forin =>
for (const key in object) {
   if (object.hasOwnProperty(key)) {
      const element = object[key];
      
   }
}

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов