@ blazediff/ 对象
闪电快结构对象与详细变化跟踪的比较.
特征
- 高性能: 用智能密钥查找策略优化大对象的算法
- 精确跟踪: 嵌入对象修改的详细路径跟踪
- 综合类型: 处理原始物、对象、阵列、日期、正则ex和循环引用
- 内存效率: 具有一致对象形状的最小起落架,用于 V8 优化
- 循环检测: 已建成可配置检测的循环参考处理
- 丰富的输出: 有类型、路径、值和旧值信息的详细差异对象
安装
npm install @blazediff/object
快速启动
import diff from '@blazediff/object';
const oldObj = {
name: "John",
age: 30,
city: "NYC",
skills: ["JavaScript", "TypeScript"]
};
const newObj = {
name: "John",
age: 31,
city: "San Francisco",
skills: ["JavaScript", "TypeScript", "Go"],
active: true
};
const changes = diff(oldObj, newObj);
console.log(changes);
输出 :
[
{
"type": 2,
"path": ["age"],
"value": 31,
"oldValue": 30
},
{
"type": 2,
"path": ["city"],
"value": "San Francisco",
"oldValue": "NYC"
},
{
"type": 0,
"path": ["skills", 2],
"value": "Go",
"oldValue": undefined
},
{
"type": 0,
"path": ["active"],
"value": true,
"oldValue": undefined
}
]
API 参考
diff(oldObj, newObj, options?)
比较两个对象并返回一系列差异.
参数:
oldObj(任何):用于比较的原始对象newObj(任何):要比较的新对象options(对象,可选): 配置选项detectCycles(boolean):启用循环参考检测(默认:true(中文(简体) )
回返情况:
Difference[]: 差异对象矩阵
类型
Diff 函数返回具有以下结构的相差对象数组:
interface Difference {
type: DifferenceType;
path: (string | number)[];
value: any;
oldValue: any;
}
enum DifferenceType {
CREATE = 0, // Property or array element was added
REMOVE = 1, // Property or array element was deleted
CHANGE = 2 // Property or array element value was modified
}
不同类型 :
0(CREATE) - 添加属性或阵列元素1(REMOVE) - 属性或阵列元素被删除2(change) - 修改了属性或阵列元素值
所有相差对象都与 type, (中文(简体) ), path, (中文(简体) ), value,以及 oldValue 字段用于优化 V8 性能.
使用量
import diff from '@blazediff/object';
// Simple property changes
const result = diff(
{ a: 1, b: 2, c: 3 },
{ a: 1, b: 20, d: 4 }
);
// Returns changes for modified 'b', removed 'c', and added 'd'
嵌入对象
// Deep nested changes
const oldData = {
user: {
profile: {
settings: { theme: 'dark', notifications: true }
}
}
};
const newData = {
user: {
profile: {
settings: { theme: 'light', notifications: true }
}
}
};
const changes = diff(oldData, newData);
// Returns: [{ type: 2, path: ['user', 'profile', 'settings', 'theme'], value: 'light', oldValue: 'dark' }]
矩阵比较
// Array modifications
const changes = diff(
{ items: ['a', 'b', 'c'] },
{ items: ['a', 'x', 'c', 'd'] }
);
// Detects element changes and additions