dollar
@dollar
Делай добро и бросай его в воду.

Всё ли в порядке при удалении свойств объекта в цикле for in?

Предполагается, что свойство проверяется изолированно от других свойств. То есть в итерации, где проверяется свойство x, может быть удалено только это свойство.
for(let key in obj) {
	if (obj[key] % 2 == 0) delete obj[key];
}

Возможны ли пропуски? То есть может ли поменяться порядок при удалении свойства?
В спецификации очень мутно написано, что гарантируется, а что нет.
UPD: Объект нормальный, с обычными свойствами типа obj.prop = 123;
  • Вопрос задан
  • 130 просмотров
Решения вопроса 1
profesor08
@profesor08 Куратор тега JavaScript
Не совсем, такая конструкция может забуриться в свойства прототипа, и тебе надо как-то их проверять с помощью hasOwnProperty.

Но можно использовать Object.keys, получить массив ключей объекта и пробежаться по ним, проверяя значения объекта и удаляя. Данный метод гарантированно вернет только свойства объекта и проигнорирует свойства прототипа.

const items = {
  a: 1,
  b: 2,
  c: 3,
  d: 4,
  e: 5,
};

Object.keys(items).forEach(key => {
  if (items[key] % 2 === 0) delete items[key];
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы