README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
捐赠
任何捐赠都将不胜感激。 😄
企业用户
deepmerge-ts 作为 Tidelift 订阅的一部分提供。
Tidelift 正与 deepmerge-ts 的维护者以及不断壮大的开源维护者网络合作,以确保
您的开源软件供应链现在及未来都符合企业标准。
了解更多。
安装
npm
# Install with npm
npm install deepmerge-ts
# Install with pnpm
pnpm add deepmerge-ts
# Install with yarn
yarn add deepmerge-ts
# Install with bun
bun add deepmerge-ts
jsr
# Install in a node project
npx jsr add @rebeccastevens/deepmerge
# Install in a deno project
deno add jsr:@rebeccastevens/deepmerge
# Install in a bun project
bunx jsr add @rebeccastevens/deepmerge
特性
- 智能合并 - 高性能。
- 合并后的输出具有正确的类型。
- 支持 Record 合并。
- 支持 Array 合并。
- 支持 Map 和 Set 合并。
- 支持自定义合并。
用法
使用默认配置的示例
import { deepmerge } from "deepmerge-ts";
const x = {
record: {
prop1: "value1",
prop2: "value2",
},
array: [1, 2, 3],
set: new Set([1, 2, 3]),
map: new Map([
["key1", "value1"],
["key2", "value2"],
]),
};
const y = {
record: {
prop1: "changed",
prop3: "value3",
},
array: [2, 3, 4],
set: new Set([2, 3, 4]),
map: new Map([
["key2", "changed"],
["key3", "value3"],
]),
};
const z = {
record: {
prop1: undefined,
prop3: undefined,
prop2: undefined,
prop4: undefined,
},
array: undefined,
set: undefined,
map: undefined,
};
const merged = deepmerge(x, y, z);
console.log(merged);
// Prettierfied output:
//
// Object {
// "record": Object {
// "prop1": "changed",
// "prop2": "value2",
// "prop3": "value3",
// "prop4": undefined,
// },
// "array": Array [1, 2, 3, 2, 3, 4],
// "set": Set { 1, 2, 3, 4 },
// "map": Map {
// "key1" => "value1",
// "key2" => "changed",
// "key3" => "value3",
// },
// }
你可以在 codesandbox.io 上尝试此示例。
合并到目标对象
如果你想使用合并结果更新目标对象,而不是创建一个新的
对象,可以使用 deepmergeInto。
此函数最适合用于所有类型相同的对象。
注意:如果目标对象的类型与输入对象不同,我们将断言目标的类型已更改
(使用 deepmergeIntoCustom 时不会自动执行此操作)。
自定义合并过程
我们为每个主要的 deepmerge 函数提供了自定义函数:deepmergeCustom 和 deepmergeIntoCustom。
你可以使用这些函数来自定义值应如何合并的细节。
有关更多详细信息,请参阅 deepmerge 自定义文档。
性能
我们使用智能合并,而不是某些替代库使用的经典合并策略。这极大地提高了 性能,包括执行时间和内存使用率。
经典合并(我们不是这样做的)
在经典合并中,每个输入与下一个输入合并,直到所有输入都合并完毕。
当需要合并大量项目时,此策略存在严重的性能问题。

智能合并(我们的做法)
通过我们的智能合并,我们向前查看哪些内容可以被合并,并且只合并这些内容。
除了性能提升之外,该策略还一次性合并多个输入;从而带来诸如 对输入取平均值等好处。

API
参见 API 文档.
