【问题标题】:How to merge array of object and another array of objects如何合并对象数组和另一个对象数组
【发布时间】:2020-07-11 06:40:46
【问题描述】:

我有两个数组,数组 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",
                },
            ]
        }
    ]

我想将 array2 内容属性与数组 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) 

【问题讨论】:

  • 那你是怎么做到的?你能显示那个代码吗?
  • array1.concat(array2)
  • 你有嵌套数组,迭代和推送
  • 您的输入与您的预期输出并没有真正的意义。例如,您的结果中没有提到“存款”。您能否简化示例数据并确保输入与输出匹配?这将有助于正确回答问题。另外,请在您的问题中包含您迄今为止尝试过的代码,以帮助您获得更好的答案。
  • 让数据 = array1[0].content.concat(array2[0].content)

标签: javascript arrays reactjs object functional-programming


【解决方案1】:
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));

【讨论】:

    【解决方案2】:

    似乎array1[0].content = array1[0].content.concat(array2[0].content) 应该可以工作

    但是对于 ES6 你也可以这样做

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

    如果您在数组 1 和数组 2 中有多个项目,您也可以这样做(只要它们的长度匹配)

    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]})
    

    【讨论】:

    • 我想将数组 2 的内容属性与数组 1 合并
    • 它与此解决方案有何不同?
    • 很抱歉得到了答案,但是,你能不使用 [0] 做吗,我的意思是我想动态地做
    【解决方案3】:
    const mergedArray = [...array1[0].content, ...array2[0].content]
    array1[0].content = mergedArray
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      相关资源
      最近更新 更多