@Alisa94

Как добавить другие уникальные свойства в уже существующую?

Имею такой код.

const A = [
  { category: "Walls", id: "1", symbol: "Wall-Ext_102", family: "Basic Walls" },
  { category: "Walls", id: "2", symbol: "Wall-Ext_102", family: "Basic Walls" }
];
const B = [
  { category: "Window", id: "3", symbol: "Window-Ext_102", family: "Basic Window" },
  { category: "Walls", id: "4", symbol: "Wall-Other-102", family: "Other Walls" }
];
const C = [
  { category: "Walls", id: "5", symbol: "Wall-Ext_102", family: "Basic Walls" },
  { category: "Floor", id: "6", symbol: "Floor-Ext_102", family: "Basic Floor" }
];
const D = [
  { category: "Walls", id: "5", symbol: "Wall-Ext_102", family: "Basic Walls" },
  { category: "Walls", id: "6", symbol: "Wall-Ext_102", family: "Basic Walls" }
];

const data = [...A, ...B, ...C, ...D];

const result = [];
const map = new Map();
for (const item of data) {
  if (!map.has(item.category)) {
    map.set(item.category); 
    result.push([
      {
        category: item.category,
        family: item.family,
        symbol: item.symbol,
      }
    ]);
  }
}


Он создаёт объект с содержанием уникальных имён категорий. Мне нужно исправить её таким образом, чтобы в полученных уникальных категорий так же содержались уникальные family. Сейчас я могу получить только одно family, но я не могу получить так же family с названием "Other Walls". Таким же образом в каждой family мне нужно получить symbol.

В итоге должен получиться такой объект:

let obj = {
  category: {
    Walls: {
      family: {
        'Basic Walls': {
          symbol: {
            'Wall-Ext_102': {
              id: { 0: 1, 1: 2 },
            },
          },
        },
        'Other Walls': {
          symbol: {
            'Wall-Other-102': {
              id: { 0: 4 }
            }
          }
        }
      },
    },
    Window: {
      family: {
        'Basic Window': {
          symbol: {
            'Window-Ext-102': {
              id: { 0: 3, }
            }
          }
        }
      }
    },
    Floor: {
      family: {
        'Basic Floor': {
          symbol: {
            'Floor-Ext_102': {
              id: { 0: 6, }
            }
          }
        }
      }
    }
  }
}
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@StockholmSyndrome
const result = data.reduce((acc, curr) => {
  const {category, family, symbol, id} = curr;
  acc.category[category] = acc.category[category] || {family: {}};
  acc.category[category].family[family] = acc.category[category].family[family] || {symbol: {}};
  acc.category[category].family[family].symbol[symbol] = acc.category[category].family[family].symbol[symbol] || {id: []};
  acc.category[category].family[family].symbol[symbol].id.push(id);
  return acc;
}, {category: {}});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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