Как я могу объединить и сопоставить 2 отдельных объекта? - PullRequest
0 голосов
/ 02 июля 2019

Что я хочу

У меня есть 2 разных массива / объекта Java-Script , но с соответствующими идентификаторами .Я хочу объединить их в новый объект.Таким образом, как данные основного объекта, так и любые соответствующие элементы из вторичного объекта объединяются в объединенный результат.

То, что я пытался

Я пытался использовать функцию Object.assign(), но безуспешно.

С учетом ввода

Пример кода, поэтому у меня есть 2 отдельных объекта ( main и линии ):

let main = [
    {
        "Id": "1",
        "Name": "Testing data"
    }
]

let lines = [
    {
        "OtherId": "1",
        "code": "AU-29830"
    },
    {
        "OtherId": "1",
        "code": "AU-29854-Single"
    },
    {
        "OtherId": "1",
        "code": "TV-BB21084623"
    },
    {
        "OtherId": "2",
        "code": "Don't Merge"
    },
    {
        "OtherId": "3",
        "code": "Don't Merge"
    }
]

Ожидаемый результат

Я хочу объединить эти 2 массива, чтобы на выходе был отдельный массив , содержащий merged main-object .Этот объединенный главный объект должен содержать исходное содержимое самого себя, а также вложенный отфильтрованный вторичный массив (только содержащий соответствующих объектов ).Фильтрация была выполнена с использованием id из объекта основного массива , который должен совпадать ( слегка отклоняющийся id) от каждого объекта вторичного объекта .массив .

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

let result = [
   {
        "Id": "1",
        "Name": "Testing data",
        "lines": [
            {
                "OtherId": "1",
                "ProductCode": "AU-29830"
            },
            {
                "OtherId": "1",
                "ProductCode": "AU-29854-Single"
            },
            {
                "OtherId": "1",
                "ProductCode": "TV-BB21084623"
            }
        ]
    }
]

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Поскольку ваш main является массивом, я предполагаю, что в нем может оказаться более одного основного элемента. Если это так, вот один способ объединить ваши line элементы в каждый:

const mergedMainItems = 
    main.map(mainItem=>({
        ...mainItem, 
        lines: lines.filter(line=>mainItem["Id"] === line["OtherId"])
    }))
0 голосов
/ 02 июля 2019

Я думаю, что для этого примера это будет работать:

let result = [];
result.push({...main[0]}); //or even result.push(main[0])
result[0].lines = [];
for(let l in lines){
  if(lines[l].code != "Don't Merge"){
    result[0].lines.push({OtherId: lines[l].OtherId, ProductCode: lines[l].code})
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...