一个用于深度(递归)合并 JavaScript 对象的库
深度合并两个或多个对象的可枚举属性。
UMD 打包后压缩并gzip后大小为723B
const x = {
foo: { bar: 3 },
array: [{
does: 'work',
too: [ 1, 2, 3 ]
}]
}
const y = {
foo: { baz: 4 },
quux: 5,
array: [{
does: 'work',
too: [ 4, 5, 6 ]
}, {
really: 'yes'
}]
}
const output = {
foo: {
bar: 3,
baz: 4
},
array: [{
does: 'work',
too: [ 1, 2, 3 ]
}, {
does: 'work',
too: [ 4, 5, 6 ]
}, {
really: 'yes'
}],
quux: 5
}
merge(x, y) // => output使用 npm 执行:
npm install deepmergedeepmerge 也可以直接在浏览器中使用,无需包管理器或打包工具:来自 unpkg.com 的 UMD 版本。
deepmerge 提供了一个 CommonJS 入口点:
const merge = require('deepmerge')由于 Webpack 的 bug,ESM 入口点已被移除。
merge(x, y, [options])深度合并两个对象 x 和 y,返回一个新的合并对象,其中包含来自 x 和 y 的元素。
如果 x 和 y 中同时存在相同键的元素,则结果中会显示 y 的值。
合并会创建一个新对象,因此 x 或 y 都不会被修改。
注意: 默认情况下,数组通过拼接进行合并。
merge.all(arrayOfObjects, [options])将任意数量的对象合并为一个结果对象。
const foobar = { foo: { bar: 3 } }
const foobaz = { foo: { baz: 4 } }
const bar = { bar: 'yay!' }
merge.all([ foobar, foobaz, bar ]) // => { foo: { bar: 3, baz: 4 }, bar: 'yay!' }arrayMerge合并两个数组有多种方式,以下是一些示例,但您也可以创建自己的自定义函数。
您的 arrayMerge 函数将被调用,并传入三个参数:一个 target 数组、source 数组,以及一个包含以下属性的 options 对象:
isMergeableObject(value)cloneUnlessOtherwiseSpecified(value, options)arrayMerge 示例: 覆盖目标数组暂无开放 Issues,或尚未同步最近议题。