@bzotsss

Как попарно соединить два объекта в массиве?

Как попарно соединить два объекта в массиве? Массив такого вида:

[
  {ingridient: "Toor dal"},
  {ingridient: "Water"},
  {ingridient: "Salt"},
  {ingridient: "Turmeric"},
  {ingridient: "Ghee"},
  {measures: "1 cup"},
  {measures: "2-1/2 cups"},
  {measures: "1 tsp"},
  {measures: "1/4 tsp"},
  {measures: "3 tbs"},
]

Я хочу, чтобы мой первый объект, который содержит поле ingridient, можно было соединить с первым объектом, который содержит поле measures, второй со вторым, третий с третьим, и т.д.
Для ещё большего понимания вот ссылка на codepen - https://codepen.io/Thgfhhuy/pen/xxgNzGM (смотрите строку 26).
  • Вопрос задан
  • 505 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const newArr = Array.from(
  { length: arr.length / 2 },
  (n, i) => ({ ...arr[i], ...arr[i + arr.length / 2] })
);

Но всегда ли количество ключей будет равно двум? - лучше посчитаем самостоятельно, сколько их там:

const numKeys = new Set(arr.flatMap(Object.keys)).size;

const newArr = arr.reduce((acc, n, i, a) => (
  Object.assign(acc[i % (a.length / numKeys)] ??= {}, n),
  acc
), []);

// или

const numKeys = Object.keys(Object.assign({}, ...arr)).length;
const numObjs = arr.length / numKeys;

const newArr = Array.from(
  { length: numObjs },
  (n, i) => Object.assign({}, ...Array.from(
    { length: numKeys },
    (m, j) => arr[j * numObjs + i]
  ))
);

Или можно считать какой ключ сколько раз встретился, и добавлять свойство соответствующему элементу собираемого массива:

const newArr = arr.reduce((acc, n) => {
  const [ [ k, v ] ] = Object.entries(n);
  const i = acc[0][k] = (acc[0][k] ?? -1) + 1;
  (acc[1][i] ??= {})[k] = v;
  return acc;
}, [ {}, [] ])[1];
Ответ написан
WblCHA
@WblCHA
const ingredients = arr.slice(0, arr.length / 2);
const measures = arr.slice(arr.length / 2);

const result = ingradients.map((ing, i) => ({ ...ing, ...measures[i] }));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы