@art-site/art-core-ts-containers (中文(简体) )
在JavaScript和TypeScript中与阵列和平面对象合作的基本,高性能公用事业.
为什么是这个模块?
在现代JavaScript中,由于对象结构、分解和扩散,与阵列和平面对象合作变得容易得多(...接线员。 然而,一些核心能力在本土JavaScript中仍然缺失或效率低下. 最重要的是:
- 健全纯功能,优化实施
merge处理null财务报告和审定财务报表undefined价值明显用于最大功用 - 用于平整和压缩阵列的高效公用事业.
- 检查对象是否有密钥或数出其密钥的最快方式( 自
Object.keys(obj).length缓慢).
安装和使用示例( 需要)
用 npm 安装 :
npm install @art-suite/art-core-ts-containers
基本用途:
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功能这样运作.