• Изменение в карточке товара в зависимости от выбора размера?

    Добавьте переменную selectedSize. В нее помещайте выбранный объект размера и берите эти данные из selectedSize.
    Всё.

    Кстати, почему у вас не все варианты имеют id?
    Ответ написан
  • Как сгруппировать id объектов, у которых совпадают остальные свойства?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Нет смысла выделять первый id как особый, и добавлять к нему в массив match другие похожие — все id с одинаковыми прочими значениями равноправны. Поэтому предлагаю как результат просто массивы, где собраны id с совпадающими свойствами.

    Понадобится хэш из ключей, исключая id, упорядоченных по алфавиту, и значений. Этот отпечаток будет одинаков у совпадающих объектов, несмотря на разные id (и разный порядок ключей).

    Получаем объекты { id, hash }, затем составляем «словарь», где ключи – хэши, а значения – Set'ы с id, у которых оказался одинаковый хэш. Set'ы – чтобы не повторялись одинаковые id.

    Потом остаётся из этих Set'ов сделать обычные массивы.
    const arr = [
      { id: 1, we: 'cn', le: null },
      { id: 2, le: null, we: 'cn' },
      { id: 3, we: 'cn', le: 'car' },
      { id: 1, we: 'cn', le: null },
    ];
    
    const dict = arr
      .map(({ id, ...obj }) => {
        const keys = Object.keys(obj).sort();
        const ordered = keys.reduce((acc, c) => {
          acc[c] = obj[c];
          return acc;
        }, {});
        return { id, hash: JSON.stringify(ordered) };
      })
      .reduce((acc, c) => {
        (acc[c.hash] ??= new Set()).add(c.id);
        return acc;
      }, {});
    
    Object.values(dict).map(s => [...s]); // [ [1, 2], [3] ]
    Ответ написан
    9 комментариев