@SergeiB

Как правильно записать индекс (детали в вопросе)?

Есть следующий код:

Как записать индекс каждому из баннеров таким образом, как будто он единственный среди карточек?
Что должно получиться.

{
  ...
  "banners": [{
    "index": 2 // Banner 1
  }, {
    "index": 2 // Banner 2
  }, {
    "index": 2 // Banner 3
  }, {
    "index": 5 // Banner 4
  }],
  ...
}

  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
@ildar-meyker
Я убрал лишний код, не относящийся к задаче напрямую, и вот что получилось.

const $elems = document.querySelector('.js-cards').children;

let banners = [];

[...$elems].forEach(($elem, index) => {
  if ( !('card' in $elem.dataset) ) {
    banners.push({
      elem: $elem,
      index: index - banners.length
    })
  }
});

console.log(banners);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
В reduce() в передаваемом объекте добавьте поле для передачи индекса баннера.

Если встречается card – поле сбрасывать.
Если встретился баннер:
- нет индекса – брать i и сохранять его в объекте;
- есть индеса – использовать его.

spoiler
const container = document.querySelector(".js-cards");

const cards = [...container.children].reduce(function (obj, item, i) {
  if ("card" in item.dataset) {
    obj[item.dataset.card] = (obj[item.dataset.card] || []).concat(item);
    obj["all"] = (obj["all"] || []).concat(item);
    if (obj.hasOwnProperty('bannerIndex')) delete obj.bannerIndex;
  } else {
    if (! obj.hasOwnProperty('bannerIndex')) obj.bannerIndex = i;
    obj["banners"] = (obj["banners"] || []).concat({ item: item, index: obj.bannerIndex });
  }
  return obj;
}, {});

console.log(cards);
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Artezio Нижний Новгород
от 130 000 до 180 000 ₽
XPOWER Одесса
от 3 000 до 5 500 $
Artezio Москва
от 160 000 до 220 000 ₽