gpt4 book ai didi

javascript - JavaScript 中两个深层对象的交集

转载 作者:行者123 更新时间:2023-11-29 10:28:40 27 4
gpt4 key购买 nike

我有两个 JavaScript 对象(任意深度),它们具有很多相同的信息。

我正在寻求帮助获取两个对象之间的共享数据

例如:

const a = {
name: 'Alice',
features: {
speed: 3,
strength: 90,
mind: {
power: 42
}
}
};

const b = {
name: 'Bob',
features: {
speed: 3,
stamina: 1,
mind: {
power: 42,
flexibility: 0,
telekinesis: 42
}
}
};

我的目标是想出一个解决方案来生成他们共享的数据:

const shared = {
features: {
speed: 3,
mind: {
power: 42
}
}
}

我正在操作的真实数据嵌套任意深度(通常是对象中包含数十个对象),但我希望以上示例对您有所帮助。

这是一次性任务,所以我并不是特别关心性能,而且我很乐意使用任何库,只要它能工作。感谢您的帮助!

最佳答案

您可以通过检查两个对象中是否存在属性、真值属性和相同的对象类型或相同的值来使用递归方法。

使用变量 temp 可以防止出现空的嵌套对象。

function common(object1, object2) {
return Object.assign(...Object.keys(object1).map(k => {
var temp;
if (!(k in object2)) {
return {};
}
if (object1[k] && typeof object1[k] === 'object' &&
object2[k] && typeof object2[k] === 'object') {
temp = common(object1[k], object2[k]);
return Object.keys(temp).length ? { [k]: temp } : {};
}
if (object1[k] === object2[k]) {
return { [k]: object1[k] };
}
return {};
}));
}

const
a = { name: 'Alice', features: { speed: 3, strength: 90, mind: { power: 42 } } };
b = { name: 'Bob', features: { speed: 3, stamina: 1, mind: { power: 42, flexibility: 0, telekinesis: 42 } } };

console.log(common(a, b));
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - JavaScript 中两个深层对象的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063018/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com