下面是一个示例代码,演示了如何比较两个对象,并对数组嵌套值进行分组:
function groupNestedValues(obj1, obj2) {
// 获取obj1和obj2中所有嵌套值的数组
const values1 = Object.values(obj1).flatMap(getNestedValues);
const values2 = Object.values(obj2).flatMap(getNestedValues);
// 创建一个Map来存储分组结果
const groups = new Map();
// 遍历values1数组,将每个值与values2中的值进行比较
for (const value1 of values1) {
const matchingValues = [];
for (const value2 of values2) {
if (compareValues(value1, value2)) {
matchingValues.push(value2);
}
}
groups.set(value1, matchingValues);
}
return groups;
}
// 递归函数,用于获取嵌套值
function getNestedValues(obj) {
const values = [];
for (const value of Object.values(obj)) {
if (Array.isArray(value)) {
values.push(...value.flatMap(getNestedValues));
} else {
values.push(value);
}
}
return values;
}
// 比较两个值是否相等
function compareValues(value1, value2) {
return JSON.stringify(value1) === JSON.stringify(value2);
}
// 示例对象
const obj1 = {
a: [1, 2, 3],
b: {
c: [4, 5],
d: {
e: 6
}
}
};
const obj2 = {
a: [1, 3],
b: {
c: [4, 6],
d: {
e: 6
}
}
};
// 调用函数并打印结果
const result = groupNestedValues(obj1, obj2);
console.log(result);
以上代码会将obj1和obj2中的嵌套值进行比较,并将相同的值分组存储在一个Map中。在示例中,result
的输出结果如下:
Map(3) {
1 => [ 1 ],
6 => [ 6 ],
4 => [ 4 ],
}
其中,键表示分组依据的值,值表示与该值相同的值的数组。