# @art-suite/art-core-ts-containers 中文文档

规范地址：https://npmcn.com/package/%40art-suite/art-core-ts-containers/

版本：1\.0\.1
npm 元数据更新时间：2026-06-19T10:22:27.030Z
中文译文更新时间：2026-11-06T20:38:55.866Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40art-suite/art-core-ts-containers
原文对照：https://npmcn.com/package/%40art-suite/art-core-ts-containers/?lang=original
项目主页：https://github.com/art-suite/art-suite-ts#readme
源码仓库：https://github.com/art-suite/art-suite-ts

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：125 kB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2025-05-12T08:59:52.572Z
- 最新版本发布：2026-06-19T10:22:26.903Z
- 近 30 天下载量：3230（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：34（近 12 个月 7 个）

## 中文简介

TypeScript 字符串工具库

## 安装

```sh
npm install @art-suite/art-core-ts-containers
```

也可以使用：`pnpm add @art-suite/art-core-ts-containers`、`yarn add @art-suite/art-core-ts-containers`、`bun add @art-suite/art-core-ts-containers`

## README

# @art-site/art-core-ts-containers (中文(简体) )

在JavaScript和TypeScript中与阵列和平面对象合作的基本,高性能公用事业.

## 为什么是这个模块?

在现代JavaScript中,由于对象结构、分解和扩散,与阵列和平面对象合作变得容易得多(`...`接线员。 然而,一些核心能力在本土JavaScript中仍然缺失或效率低下. 最重要的是:

-   健全纯功能,优化实施 `merge` 处理 `null` 财务报告和审定财务报表 `undefined` 价值明显用于最大功用
-   用于平整和压缩阵列的高效公用事业.
-   检查对象是否有密钥或数出其密钥的最快方式( 自 `Object.keys(obj).length` 缓慢).

## 安装和使用示例( 需要)

用 npm 安装 :

```sh
npm install @art-suite/art-core-ts-containers
```

基本用途:

```ts
import {
  merge,
  deepMerge,
  deepMergeInfo,
  compactFlatten,
  objectHasKeys,
  objectKeyCount,
  deepStripNulls,
  deepStripNullish,
  stripNulls,
  stripNullish,
} from "@art-suite/art-core-ts-containers";

// Merge objects: later objects take priority, null deletes, undefined is ignored/stripped
merge({ a: 1, b: 2, c: 3 }, { b: null, c: undefined, d: 4 }); // { a: 1, b: null, d: 4 }

// Deep merge vs shallow merge with nested objects
const base = { a: 1, b: { x: 1, y: 2 }, c: [1, 2] };
const update = { b: { y: 3, z: 4 }, c: [3, 4], d: 5 };

merge(base, update); // { a: 1, b: { y: 3, z: 4 }, c: [3, 4], d: 5 } - b.x is lost!
deepMerge(base, update); // { a: 1, b: { x: 1, y: 3, z: 4 }, c: [3, 4], d: 5 } - b.x preserved

// Deep merge into existing object (mutates the target)
const target = { a: 1 };
deepMergeInfo(target, { b: 2 }, { c: 3 }); // target is now { a: 1, b: 2, c: 3 }

// Flatten and compact arrays (removes null/undefined, flattens nested arrays)
compactFlatten([1, null, [2, undefined, [3, 4]], 5]); // [1, 2, 3, 4, 5]

// Efficient object key checks
objectHasKeys({}); // false
objectHasKeys({ a: 1 }); // true
objectKeyCount({ a: 1, b: 2 }); // 2

const data = { a: 1, b: null, c: { d: null, e: 2 } };
const arrayData = [1, 2, null, undefined, { b: null }];

deepStripNulls(data); // { a: 1, c: { e: 2 } }
deepStripNullish(arrayData); // [1, 2, {}]
stripNulls(arrayData); // [1, 2, undefined, {b: null}]
stripNullish(data); // { a: 1, c: { d: null, e: 2 } }
```

## 职能概览

### 对象合并

-   `merge(...objects)` ——合并对象列表. 列表中的后期对象优先.
    
    -   **数值**: 替换现有值(使用) `null` 改为“删除”一个值.
    -   **未定义的值**:被忽略和剥去(不覆盖或出现在结果中).
-   `mergeInto(...objects)` - 与 `merge` 但变异第一个对象,而不是创建一个新的对象.
    
    -   **业绩**: 当想要合并到已有对象时,效率更高.
    -   **回返**:已变异 `into` 对象.

> 合并在功能上没有优化 - 即如果合并( a, b) 深等分 a, 结果仍将是一个新对象

### 对象深度合并

和合并一样,除非遇到平面对象或阵列,否则递归合并.

一般原则:当深度(a,b):

-   **直觉地:** “b”是想要的值,“a”是默认值
    
-   **b 未定义 :** "a"归来
    
-   **b 无效**数字 : `null` 返回; 将此用作“ b” 逻辑删除“ a” 中的元素的方法
    
-   **a和b 是阵列**:按对向索引合并。 “ b. 长度” 用于输出长度
    
-   **a和b为普通对象**: 匹配密钥时合并; 输出将同时设置 Object. key(a) 和 Object. key(b)
    
-   **否则,a和b是不同的类型**: b 为返回
    
-   `deepMerge(...objects)` ——递归地将嵌入式对象和阵列合并. 以后的对象优先.
    
-   `deepMergeInfo(into, ...objects)` - 与 `deepMerge` 但变异第一个对象,而不是创建一个新的对象.
    
    -   **业绩**: 当想要合并到已有对象时,效率更高.
    -   **回返**:已变异 `into` 对象.

> DeepMorge在功能上没有被优化——即如果 deepMorge(a,b) deep-equality a,结果仍将是一个新对象.

### 阵列公用事业

-   `compactFlatten(array)` - 递归平地嵌入阵列并去除所有 `null`编号 :`undefined` 数值.
-   `compact(array)` - 全部删除 `null`编号 :`undefined` 来自(可能嵌入的)数组的值.
-   `flatten(array)` ——递归平地将嵌入式阵列成单数组.

> 这些职能的职能优化(见下文)

### 对象密钥工具

-   `objectHasKeys(obj)` - 回返 `true` 如果该物体至少有一个自有财产, `false` 否则。 (比 `Object.keys(obj).length > 0`(中文(简体) )
-   `objectKeyCount(obj)` ——返回对象上自有属性的数量. (比 `Object.keys(obj).length`(中文(简体) )

### 裸体剥离公用事业

-   `deepStripNulls(data)` - 递归带 `null` 从一个对象的所有属性和一个数组/数组的元素。 保存原始物的类型,功能,日期,RegExps.
-   `deepStripNullish(data)` - 递归带 `null` 财务报告和审定财务报表 `undefined` 从一个对象的所有属性和一个数组/数组的元素。 保存原始物的类型,功能,日期,RegExps.
-   `stripNulls(data)` - 浅色条纹 `null` 从一个对象的所有属性和一个数组/数组的元素。 不重现为嵌入式对象或阵列.
-   `stripNullish(data)` - 浅色条纹 `null` 财务报告和审定财务报表 `undefined` 从一个对象的所有属性和一个数组/数组的元素。 不重现为嵌入式对象或阵列.

> Null(ish) 剥离功能未优化

## API 文档参考

关于所有被输出功能及其参数的详细信息,请参见源代码内的TypeScript打字和JSDoc评论.

## 功能优化( 进行中的工作)

并非所有功能尚未在功能上优化:

-   **功能优化**: 如果返回的值在结构上与通过值完全相同,则应在不创建任何新对象或数组的情况下返回通过值。 这样做更有效率,还可以快速检查是否有变化.

目标是让所有这些功能都这样运作,但现在只有紧凑,平坦和紧凑的Flatten功能这样运作.

## 常见问题

### @art-suite/art-core-ts-containers 是什么？

TypeScript 字符串工具库

### 如何安装 @art-suite/art-core-ts-containers？

在项目目录运行 npm install @art-suite/art-core-ts-containers，或使用 pnpm add / yarn add / bun add。

### @art-suite/art-core-ts-containers 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @art-suite/art-core-ts-containers 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @art-suite/art-core-ts-containers 可以商用吗？

@art-suite/art-core-ts-containers 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @art-suite/art-core-ts-containers 的下载量有多少？

根据 npm 官方下载统计，@art-suite/art-core-ts-containers 在 2026/10/07 – 2026/11/05 这 30 天内被下载 3,230 次，日均约 108 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @art-suite/art-core-ts-containers 还在维护吗？

最新版本 1\.0\.1 发布于 2026/06/19（4 个月前）；至今共发布 34 个版本，其中过去 12 个月发布了 7 个；首次发布于 2025/05/12。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

