【发布时间】:2014-04-13 17:06:26
【问题描述】:
我有两个对象。它们的结构看起来有点像这样:
{
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”课程。
(第一个是要求,第二个是这个人有什么。我需要检查这个人是否具备所有要求)
可以是普通的 JS、jQuery 等。我不想为此使用服务器端语言。
有没有办法做到这一点?
谢谢!
【问题讨论】:
-
JSON.stringify(obj1.courses) == JSON.stringify(obj2.courses) -
@adeneo 这不起作用——它检查对象是否相同,我们想检查一个是否是另一个的子集。事实上,理论上,如果它们相同,甚至不能保证返回
true,因为对象中的字段可能以不同的顺序出现。而且它对数组中元素的顺序也很敏感;请注意,"courses"数组在两种情况下都有不同顺序的元素。 -
@DavidKnipe - 是的,我知道,但它在某些情况下有效,如果顺序、大小写和一切都相等等,但这是比较对象的不好方法,比较对象在本身作为两个对象永远不会相同,应该检查某些属性或索引等。
-
@DavidKnipe 和 edeneo - 谢谢你们。但正如大卫之前所说 - 我不是要检查它们是否相等,而是要查看其中一个是否具有另一个对象的所有项目。
标签: javascript