gpt4 book ai didi

javascript - 对象比较 : check if an object contains the whole other object

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:53 24 4
gpt4 key购买 nike

我有两个对象。它们的结构看起来有点像这样:

{
education: ["school", "institute"],
courses: ["HTML", "JS", "CSS"],
Computer: {
"OS":"WXP",
"WS":"NotePad"
}
}

第二个:

{
education: ["school", "university", "institute", "collage"],
courses: ["HTML", "CSS", "JS", "Managing", "Directing"],
Computer: {
"OS":"WXP",
"WS":"NotePad",
"AV":"Avast"
},
something: function(){...},
other: "thing"

}

您可能已经注意到,第二个对象包含整个第一个对象,加上第一个对象没有的一些项目。
我需要比较这两个对象,如果第二个对象包含第一个对象的每一项,则得到答案(true-false)。
true - 如果第一个对象的所有项目也在第二个对象中
false - 如果第一个对象的至少一个项目不在第二个对象中,例如:如果第二个对象没有“css”类(class)。

(第一个是要求,第二个是这个人有什么。我需要检查这个人是否有所有的要求)

可以是纯 JS、jQuery 等等。我不想为此使用服务器端语言。

有什么办法吗?

谢谢!

最佳答案

只是递归地检查它:

function isContainedIn(a, b) {
if (typeof a != typeof b)
return false;
if (Array.isArray(a) && Array.isArray(b)) {
// assuming same order at least
for (var i=0, j=0, la=a.length, lb=b.length; i<la && j<lb;j++)
if (isContainedIn(a[i], b[j]))
i++;
return i==la;
} else if (Object(a) === a) {
for (var p in a)
if (!(p in b && isContainedIn(a[p], b[p])))
return false;
return true;
} else
return a === b;
}

> isContainedIn(requirements, person)
true

对于数组的更类似于集合逻辑的方法,顺序无关紧要,添加类似

        a.sort();
b = b.slice().sort()

(假设内容可订购)在数组比较循环之前或用非常低效的方法替换它

        return a.every(function(ael) {
return b.some(function(bel) {
return isContainedIn(ael, bel);
});
});

关于javascript - 对象比较 : check if an object contains the whole other object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23045652/

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