@lexstile

Как внутри объекта размапить неограниченное количество других объектов?

Как размапить неограниченное количество фильтров в multiple?
На выходе структура должна сохраниться, как в objData.
Важно: имя фильтра должно изменяться с каждой итерацией (filter, filter2, filter3...).
const array = [0, 1, 2, 3]; // фильтров нужно столько же, сколько элементов в массиве
const baseFilter = {
  name1: 111,
  name2: 222,
};

const objData = {
  multiple: {
    filter: {
      ...baseFilter,
      prop: 0,
    },
    filter2: {
      ...baseFilter,
      prop: 1,
    },
    filter3: {
      ...baseFilter,
      prop: 2,
    },
  },
};
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const obj = array.reduce((acc, n, i) => (
  acc[`filter${i + 1}`] = { ...baseFilter, prop: n },
  acc
), {});

или

const obj = {};
for (const [ i, n ] of array.entries()) {
  (obj['filter' + (-~i)] = Object.assign({}, baseFilter)).prop = n;
}

или

const obj = {};
for (let i = 0; i < array.length;) {
  const subobj = { prop: array[i] };
  for (const k in baseFilter) {
    subobj[k] = baseFilter[k];
  }
  obj['filter'.concat(++i)] = subobj;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Planet_93
@Planet_93
Попробуйте так
for (var p in objData.multiple) {
            console.log(p);
            console.log(objData.multiple[p].prop);
        }

Результат в Console

filter
0
filter2
1
filter3
2
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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