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

Как создать массив объектов?

Здравствуйте, есть такой вопрос, как создать массив объектов:

const contentReview = [messagesData.querySelectorAll("info"), messagesData.querySelectorAll('date')];
			contentReview.forEach((el, index) => {
				console.log(el[index].textContent)
			})


В contentReview хранятся два нодлиста, один это content, второй data , как можно сделать массив объекта, чтобы нулевой индекс а в нем text и дата и так далее, т.е content[0], data[0]
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
Решения вопроса 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
const info = messagesData.querySelectorAll('info');
const date = messagesData.querySelectorAll('date');
const length = Math.max(info.length, date.length);
const contentReview = Array.from({length}, (_, i) => ({
  info: info[i],
  date: date[i]
}));
Но нет никаких гарантий, что info и date будут одинакового размера. Я использовал Math.max для вычисления размера, но в случае не совпадения размеров, для меньшего случая возникнут undefined.
Можно использовать Max.min тогда если в одном из случаев список меньше, мы просто укоротим результат, зато все будет безопасно.
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
const combine = (keys, values, defaultValue = () => null) =>
  Array.from(
    { length: Math.max(...values.map(n => n.length)) },
    (_, i) => Object.fromEntries(keys.map((k, j) => [
      k,
      values[j][i] ?? defaultValue(i, j, k),
    ]))
  );

const keys = [ 'info', 'date' ];

// собираем элементы
const elements = combine(
  keys,
  keys.map(k => messagesData.querySelectorAll(`.${k}`)),
  (i, j, k) => `элемент .${k} с индексом ${i} отсутствует`
);

// или, текстовое содержимое элементов
const texts = combine(
  keys,
  keys.map(k => Array.from(
    messagesData.getElementsByClassName(k),
    n => n.textContent
  )),
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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