Как объединить массив объектов и другой массив объектов - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два массива, и массив 2 будет массивом слияния 1. Я использую concat, но не могу найти никакого решения.

вот массив 1:

     let array1 = [{
            label: "OA deal activities",
            content: [{
                    label: "Create OA deals",
                },

                {
                    label: "Update OA deal",
                },

                {
                    label: "OA deals",

                },

            ]
        }]

Вот массив 2 объектов:

let array2 =    [

        {
            label: "OA deal request",
            content: [{
                    label: 'OA Deal request List',
                },
                {
                    label: "View oadeal request",
                },
                {
                    label: "Update OA deal request",
                },
            ]
        }
    ]

Я хочу пометить свойство содержимого массива 2 с содержимым массива 1. мой вывод будет выглядеть примерно так:

  [{
        label: "OA deal activities",
        content: [{
                label: "Create OA deals",
            },

            {
                label: "Update OA deal",
            },

            {
                label: "OA deals",

            },{
                    label: 'OA Deal request List',
                },
                {
                    label: "View oadeal request",
                },
                {
                    label: "Update OA deal request",
                },

        ]
    }]

Я использую метод concat javascript, но не могу найти идеальное решение.

let data = array1[0].content.concat(array2[0].content) 

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

похоже, что array1[0].content = array1[0].content.concat(array2[0].content) должно работать

, но для ES6 вы также можете сделать

array1[0].content = [...array1[0].content, ...array2[0].content]

, если у вас есть несколько элементов в первом и втором массиве, вы может сделать это тоже (если их длина совпадает)

array1.forEach(function(a, i){a.content = a.content.concat(array2[i].content)

Версия ES6:

array1.forEach((a, i) => {a.content = [...a.content, ...array2[i].content]})
1 голос
/ 30 марта 2020
console.log({label: array1[0].label, content : [...array1[0].content, ...array2[1].content]})

let array1 = [
  {
    label: "OA deal activities",
    content: [
      { label: "Create OA deals" },
      { label: "Update OA deal" },
      { label: "OA deals" }
    ]
  }
];

let array2 = [
  {
    label: "Deposit",
    content: [{ label: "Deposits" }, { label: "Deposit approval" }]
  },
  {
    label: "OA deal activities",
    content: [
      { label: "OA Deal request List" },
      { label: "View oadeal request" },
      { label: "Update OA deal request" }
    ]
  }
];

console.log({
  label: array1[0].label,
  content: [...array1[0].content, ...array2[1].content]
});
// For complex array of array
const flatten = (arr, depth = 1) =>
  arr.reduce(
    (a, v) =>
      a.concat(depth > 1 && Array.isArray(v) ? flatten(v, depth - 1) : v),
    []
  );
const result2 = {
  ...array1[0],
  content: flatten(
    array1.map(x => x.content).concat(array2.map(x => x.content))
  )
};
console.log(JSON.stringify(result2, null, 2));
1 голос
/ 30 марта 2020
const mergedArray = [...array1[0].content, ...array2[0].content]
array1[0].content = mergedArray
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...