Задать вопрос
@dim5on

Как разобрать объект?

let checkboxGroup = {
        administrator : {
          checked : false ,
          value : 'Изменение администратором'
        },
        account : {
          checked : true ,
          value : 'Пополнеине счёта'
        },
        comission : {
          checked : false ,
          value : 'Списание комиссии'}
      }
let newArray = [];
// Цикл
newArray = ['Пополнеине счёта'];

Есть объект checkboxGroup, внутри которого другие объекты - administrator, comission, acccount. Нужно написать цикл, который добавляет в новый массив все значения value у каждого объекта, если checked равно true.
  • Вопрос задан
  • 458 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 4
const newArray = Object.keys(checkboxGroup) // Превращаем объект в массив ключей checkboxGroup
     .filter(name => checkboxGroup[name].checked === true) // Создаем новый массив из ключей, в котором будут только те, для которых у объекта - checked есть истина
     .map(name => checkboxGroup[name].value); // Создаем новый массив из свойств value
Ответ написан
@Interface
Object.keys(checkboxGroup)
    .map(key => checkboxGroup[key])
    .filter(item => item.checked)
    .map(item => item.value)
Ответ написан
TerNik
@TerNik
for (let prop in checkboxGroup ) {
  if (checkboxGroup.hasOwnProperty(prop) && checkboxGroup[prop]['checked']) {
    newArray.push(checkboxGroup[prop]['value']);
  }
}
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
2 рабочих решения уже предложены c O(3n) и O(2n), но для сторонников оптимизации решение с O(n):
const checkedValues = Object.getOwnPropertyNames(checkboxGroup).reduce((result, key) => {
  const {checked, value} = checkboxGroup[key];
  if(checked) {
    result.push(value);
  }
  return result;
}, []);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы