24什么网站建设,小程序代理推广,莒县城乡建设局网站,书生网站如果您想比较两个 JSON 对象#xff0c;找出哪些字段发生了变化#xff0c;并返回发生变化的字段及其新的值#xff0c;您可以编写一个函数来递归比较对象。以下是一个 TypeScript 示例#xff1a;
type JSONValue string | number | boolean | null | JsonObject | Json… 如果您想比较两个 JSON 对象找出哪些字段发生了变化并返回发生变化的字段及其新的值您可以编写一个函数来递归比较对象。以下是一个 TypeScript 示例
type JSONValue string | number | boolean | null | JsonObject | JsonArray;
interface JsonObject {[key: string]: JSONValue;
}
type JsonArray JSONValue[];function compareObjects(obj1: JsonObject, obj2: JsonObject): JsonObject {const changedFields: JsonObject {};for (const key in obj1) {if (obj1.hasOwnProperty(key)) {const value1 obj1[key];const value2 obj2[key];if (isObject(value1) isObject(value2)) {// 递归比较嵌套的对象const nestedChanges compareObjects(value1, value2);if (Object.keys(nestedChanges).length 0) {changedFields[key] nestedChanges;}} else if (!isEqual(value1, value2)) {// 如果值不相等记录变化changedFields[key] value2;}}}// 检查 obj2 中新增的字段for (const key in obj2) {if (obj2.hasOwnProperty(key) !obj1.hasOwnProperty(key)) {changedFields[key] obj2[key];}}return changedFields;
}// 判断是否为对象
function isObject(value: any): value is JsonObject {return typeof value object value ! null !Array.isArray(value);
}// 判断两个值是否相等
function isEqual(value1: JSONValue, value2: JSONValue): boolean {if (isObject(value1) isObject(value2)) {return compareObjects(value1, value2).length 0;}return value1 value2;
}// 示例
const json1: JsonObject { a: 1, b: { c: 2, d: 3 } };
const json2: JsonObject { a: 1, b: { c: 5, d: 3 }, e: newField };const changes compareObjects(json1, json2);
console.log(changes);这个函数 compareObjects 将递归比较两个对象并返回发生变化的字段及其新值。在示例中changes 对象将包含 { b: { c: 5 }, e: newField }表示字段 b 中的 c 值发生了变化以及新添加了字段 e。您可以根据实际需求调整这个函数。