Как лучше из объекта получить массив его keys , у которых свойство = true?

107
25 января 2021, 20:00

Подскажите как заменить на более es6, чтобы обойтись без let и push

const obj1 = {
    'prop-1': {
      name: 'test',
      selected: false,
    },
    'prop-2': {
      name: 'ted4',
      selected: true,
    },
    'prop-3': {
      name: 'е',
      selected: false,
    },
    'prop-4': {
      name: 'tet2222',
      selected: true,
    },
  }

  let result = []
  for(const key in obj1) {
    var value = obj1[key];
    if (value.selected) {
      result.push(key)
    }
}

Из объекта obj1 получить массив keys, у которых свойство selected = true

В данном случае на выходе получаем

["prop-2", "prop-4"]
Answer 1
  1. Получаем все имена свойств объекта с помощью Object.keys.
  2. Фильтруем полученный массив с помощью Array#filter с колбеком: key => obj1[key].selected.

const obj1 = { 
    'prop-1': { 
      name: 'test', 
      selected: false, 
    }, 
    'prop-2': { 
      name: 'ted4', 
      selected: true, 
    }, 
    'prop-3': { 
      name: 'е', 
      selected: false, 
    }, 
    'prop-4': { 
      name: 'tet2222', 
      selected: true, 
    }, 
  } 
 
const result = Object.keys(obj1).filter(key => obj1[key].selected); 
console.log(result);

Answer 2

Object.entries возвращает массив массивов вида

[
  [ 'prop-1', { name: 'test', selected: false } ],
  [ 'prop-2', { name: 'ted4', selected: true } ],
  ...
]

Вычисляем результат с помощью reduce.

const result = Object.entries(obj1)
  .reduce(
    // Конструкция [key, value] представляет
    // собой деструктуризацию массива [ 'prop-1', { name: 'test', selected: false } ],
    // когда мы в key записываем 'prop-1', а в value записываем { name: 'test', selected: false }.
    (keys, [key, value]) => (value.selected ? [...keys, key] : keys),
    [], // Начальное значение для ключей.
  );
READ ALSO
Cannot read property 'setState' of undefined [дубликат]

Cannot read property 'setState' of undefined [дубликат]

при изменении импута какого либо, возникает ошибка - Cannot read property 'setState' of undefined

130
Как запретить менеджеру паролей в Chrome влиять на шрифт в инпуте?

Как запретить менеджеру паролей в Chrome влиять на шрифт в инпуте?

Менеджер паролей изменяет шрифт, когда наводишь на какой-нибудь айтемКак можно этого избежать? Сталкивался кто? Два скриншота прилагаю

85
Проблемы vue css

Проблемы vue css

Всем привет!Сделал приложение на vueВыкладываю проект на github pages и начинаются проблемы с css,а главный фокус в том , что некоторые стили работают...

184
Добавление .ico 16x16 на сайт в меню html

Добавление .ico 16x16 на сайт в меню html

Как добавить иконку в менюшку на сайт? Как на картинке точки перед: новости, пресса ит

119