@qbudha
Чых-пыхдевелопер

Как записать свойства и значения свойств в объект избегая повторного цикла по объекту?

Доброго времени, делаю динамически генеруремую форму и возник вопрос, как динамически записывать свойства и значения в объект?
Пока выходит вот так вот - первым циклом в объект записываются свойства, вторым значения. Такое решение выглядит громоздко и мне не нравится.
Есть ли какие-нибудь варианты с помощью ES6 (или без оного) сделать так, чтобы цикл был один? Какие варианты есть вообще (цикл в цикле, рекурсия)?

let formElements = [..., ...., ....];
let formElementsByGroup = {};
  // запишим в объект типы имеющихся элеметов
  formElements.forEach(function (id){
    let formType = searchForm[id].formType;
    formElementsByGroup[formType] = [];
  });
  // теперь, когда в объекте formElementsByGroup появились свойства
  // пройдемся по массиву элеметов еще раз и запушим id элеметов
  formElements.forEach(function (id){
    let formType = searchForm[id].formType;
    formElementsByGroup[formType].push(id);
  });
  • Вопрос задан
  • 250 просмотров
Решения вопроса 2
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
formElementsByGroup[formType] = [id];
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
Перед push'ем делайте проверку наличия нужного массива, если отсутствует, создайте его:

if (!formElementsByGroup[formType]) {
  formElementsByGroup[formType] = [];
}

А вообще, можно и покороче всё это записать:

const formElementsByGroup = formElements.reduce((acc, n) => {
  const type = searchForm[n].formType;
  (acc[type] = acc[type] || []).push(n);
  return acc;
}, {});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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