javascript - 深度合并两个 json 对象 es6

标签 javascript ecmascript-6

我有两个 json 对象,其中一个嵌套。例如:

data1 : [{"name": "abc", "age": 26, "title": "xyz", "address": {"street":"yyy","city":"ttt","country":"kkk"}]
date2: [{"color": "blue", "sqad": "jkl", "priority": "rst", "division": "opq", "range": 456}]

我尝试使用扩展运算符和 object.assign 合并它们,但没有得到预期的结果。

我需要像下面这样组合:

[{"name": "abc", "age": 26, "title": "xyz", "address": {"street":"yyy","city":"ttt","country":"kkk"}, "color": "blue", "sqad": "jkl", "priority": "rst", "division": "opq", "range": 456 }]

最佳答案

您可以结合使用递归和扩展运算符:

const deepMerge = (objs) =>
  objs.reduce((acc, obj) =>
    Object.keys(obj).reduce((innerAcc, key) => ({
      ...innerAcc,
      [key]:
        key in acc
          ? typeof acc[key] === 'object' && acc[key] !== null && typeof obj[key] === 'object' && obj[key] !== null
            ? deepMerge([acc[key], obj[key]])
            : obj[key]
          : obj[key]
    }), acc),
  {})

const data1 = { name: 'abc', age: 26, title: 'xyz', address: { street: 'yyy', city: 'ttt', country: 'kkk' } }
const data2 = { color: 'blue', squad: 'jkl', priority: 'rst', division: 'opq', range: 456 }

const result = deepMerge([data1, data2])

console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 深度合并两个 json 对象 es6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58618542/

相关文章:

php - 如何将查询字符串值传递到通过 AJAX 加载的页面?

javascript - 返回多个值,包括 promise

javascript - 将印度-阿拉伯数字转换为英文数字

javascript - javascript 类中的共享回调处理程序

javascript - 一直说结果属性未定义。为什么?

javascript - 从其他数组构造多维数组

javascript - 使用 ajax 回调切换两个 id

javascript - React.addons.classSet 不是 React js 的函数

javascript - 将数组转换为 ES6 可迭代

javascript - 在协程中包装 ES6 类方法