@tantumus21

Как можно сделать функцию перебора объекта проще/чистой?

Дается объект со свойствами, которые могут иметь значения true/false. Нужно, чтобы функция вернула массив из тех свойств, которые имеют значение true.
const car = {
  door: true,
  roof: false,
  dashboard: false,
  engine: true,
  windshield: true,
  wheels: false
}

const printPartsList = (item) => {
  let list = [];
  
  for([key, value] of Object.entries(item)) {
    if(value) list.push(key)
  }
  
  return list;
}
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Проще - используйте возможности массивов более полно:

const getTruthyKeys = obj =>
  Object
    .entries(obj)
    .filter(n => n[1])
    .map(n => n[0]);

Чистой - заведите себе привычку объявлять все используемые переменные. Сейчас ваша функция гадит в глобальную (или какую-то другую внешнюю, если там есть переменные с такими же именами) область видимости (не в строгом режиме и при отсутствии таких переменных во внешних областях видимости конечно, в этом случае ваш код просто упадёт с ошибкой), вот здесь:

for([key, value] of Object.entries(item)) {


UPD. А вообще, если подумать, то такая функция чистой быть не может. Уж точно не в js.
Потому что в js можно сделать так:

const obj = new Proxy({
  a: 0,
  b: 1,
  c: 2,
}, {
  get: () => Math.round(Math.random()),
});

Ну и соответственно, результаты будут случаться для такого объекта самые разные:

console.log(Array.from({ length: 10 }, () => getTruthyKeys(obj)));

Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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