要查找嵌套在数组中的对象键的差异,可以使用递归的方式进行遍历和比较。下面是一个可能的解决方案:
function findKeyDifference(obj1, obj2) {
// 检查obj1和obj2的类型,如果不是对象或数组,直接返回
if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || Array.isArray(obj1) || Array.isArray(obj2)) {
return [];
}
let diffKeys = [];
for (let key in obj1) {
// 检查obj1中的键是否存在于obj2中
if (!(key in obj2)) {
diffKeys.push(key);
} else {
// 如果键存在于obj2中,递归比较它们的值
const keyDiff = findKeyDifference(obj1[key], obj2[key]);
// 如果存在差异,将差异的键添加到diffKeys数组中
if (keyDiff.length > 0) {
diffKeys.push(...keyDiff.map(subKey => key + '.' + subKey));
}
}
}
for (let key in obj2) {
// 检查obj2中的键是否存在于obj1中
if (!(key in obj1)) {
diffKeys.push(key);
}
}
return diffKeys;
}
这个函数会递归地遍历输入的两个对象,比较它们的键和值。如果某个键存在于一个对象中而不存在于另一个对象中,或者对应的值不同,就会被认为是差异的键。最后,函数会返回包含所有差异键的数组。
使用示例:
const obj1 = {
a: {
b: 1,
c: {
d: 2,
e: 3
}
},
f: 4
};
const obj2 = {
a: {
b: 1,
c: {
d: 2,
e: 5
}
},
g: 6
};
const diffKeys = findKeyDifference(obj1, obj2);
console.log(diffKeys); // 输出 ['a.c.e', 'f', 'g']
在这个示例中,obj1
和obj2
有一些差异的键,包括a.c.e
、f
和g
。你可以根据实际情况修改输入的对象和查找的键的路径。
领取专属 10元无门槛券
手把手带您无忧上云