У меня есть исходный объект, имеющий следующую структуру
var obj1 = {
type: "type1",
nested: {
level1: [
{ field: "field1", value: "val1"},
{ field: "field2", value: "val2"},
{
level2: [
{
field: "abc",
value: "11",
},
{
field: "abc",
value: "12",
}
]
}
]
},
in: 0,
out: 20
};
Также есть входной объект, на основе которого должно происходить слияние
var obj2 = {
type: "type1",
nested: {
level1: [
{ field: "field1", value: "val1"},
{ field: "field3", value: "val5" }
]
},
in: 0,
out: 20
};
На основе нового объекта I необходимо объединить, и в результате должно быть только уникальное. В моем случае объект может go глубоко до уровня 2. Единственное, что мне нужно, - это манипулирование «вложенным» объектом. Если присутствуют те же ключи, обновите значение, иначе просто добавьте его. Также содержимое «вложенного» объекта obj2 всегда будет присутствовать в «вложенном» объекта obj1. Если что-то из «вложенного» объекта obj2 отсутствует в «вложенном» объекта obj1, удалите этот объект. Файл тестовых примеров, прикрепленный внутри песочницы
Вывод должен выглядеть следующим образом:
result = {
type: "type1",
nested: {
level1: [
{ field: "field1", value: "val1"},
{ field: "field2", value: "val2"},
{ field: "field3", value: "val5" },
{
level2:
[
{
field: "abc",
value: "11",
},
{
field: "abc",
value: "12",
}
]
}
]
},
in: 0,
out: 20
};
Метод, который я пробовал:
const merged = [...new Set([...obj1.nested.level1, ...obj2.nested.level1])]
Песочница: https://codesandbox.io/s/angry-liskov-e5m1m