Создание массивов значений в ключах объединенных объектов

1

С javascript я пытаюсь сравнить значения в вложенных объектах JSON. Я хотел бы объединить объекты, используя метод Object.assign(), но генерировать массивы значений. Если пара ключей/значений не найдена в одном из объектов, массив должен содержать нуль;

Например, у меня есть эти 3 входных объекта:

let O1 = [
    { "group1": { "attr1": 1 } },
    { "group2": { "attr1": 2 } }
]

let O2 = [
    { "group2": { "attr1": 3 } },
    {
        "group3": {
            "attr1": 4,
            "attr2": 5
        }
    }
]

let O3 = [
    { "group1": { "attr1": 6 } },
    { "group3": { "attr1": 7 } }
]

И я хочу объединить их в этот новый объект:

let result = [
    { "group1": { "attr1": [1, null, 6] } },
    { "group2": { "attr1": [2, 3, null] } },
    {
        "group3": {
            "attr1": [null, 4, 7],
            "attr2": [null, 5, null]
        }
    }
]
  • 0
    Не могли бы вы объяснить логику этих массивов.
  • 1
    StackOverflow ожидает, что вы сначала попытаетесь решить собственную проблему , а мы также не отвечаем на домашние вопросы . Пожалуйста, обновите ваш вопрос, чтобы показать, что вы уже пробовали в минимальном, полном и проверяемом примере . Для получения дополнительной информации, пожалуйста, посмотрите, как задать хорошие вопросы , а также совершить экскурсию по сайту :)
Показать ещё 6 комментариев
Теги:
object
arrays
assign

1 ответ

1
Лучший ответ
  const result = [];

  for(var [index, array] of [O1, O2, O3].entries()){
     for(var [arrayIndex, obj] of array.entries()){
        (function copy(obj, res){
           for(var [key, value] of Object.entries(obj)){
              if(typeof value === "object"){
                 copy(value, res[key] || (res[key] = {}));
              } else {
                 if(!res[key]) res[key] = [];
                 res[key][index] = value;
             }
          }
        })(obj, result[arrayIndex] || (result[arrayIndex] = {}));
     }
  }

Короче говоря: измените свою структуру данных...

  • 0
    Попробуй!
  • 0
    Делая это в данный момент ...
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню