Javascript 如何知道一个对象是否包含另一个对象
我试图找到一个库,它能够说明对象B是否包含对象a的所有属性和值(而不是相反!) 这意味着我发现的图书馆无法处理两件事:Javascript 如何知道一个对象是否包含另一个对象,javascript,Javascript,我试图找到一个库,它能够说明对象B是否包含对象a的所有属性和值(而不是相反!) 这意味着我发现的图书馆无法处理两件事: 对象B可能比对象A有更多的关键点,而且可能是 对 对象B的数组中的项可能多于对象B A、 这可能是真的 这基本上就是lodash的方法\uuu0.difference()所做的,但仅适用于数组中的项 我发现了一些有趣的图书馆,比如,但我需要的任何东西 我可以编写一些代码来完成这项工作,但我相信其他人以前也满足过这一需求 下面是一个包含2个对象的示例: var A = { n
\uuu0.difference()
所做的,但仅适用于数组中的项
我发现了一些有趣的图书馆,比如,但我需要的任何东西
我可以编写一些代码来完成这项工作,但我相信其他人以前也满足过这一需求
下面是一个包含2个对象的示例:
var A = {
name: 'toto',
pets: [ { name: 'woof', kind: 'dog' } ]
};
var B = {
name: 'toto',
pets: [ { name: 'gulp', kind: 'fish' }, { name: 'woof', kind: 'dog' } ],
favoriteColor: 'blue'
};
这里,A包括B,因为我们可以在B中找到A的每个属性和值。
但是像diff这样的图书馆会说不,因为这不是“宠物”的第一项而是第二项,它等于A,而B有一个额外的属性“favoriteColor”
你知道一个图书馆能做这种比较吗?你可以使用评论中链接的deepCompare的修改版本。看起来,你只需要通过键长比较就可以了
//其中b具有所有a
功能(a,b){
如果(a的类型!==b的类型){
返回false;
}
如果(a的类型!==“对象”){
返回a==b;
}
//您可能需要在此处多填充数组高阶函数
if(Array.isArray(a)和&Array.isArray(b)){
返回a.every(函数(av){
返回b.indexOf(av)!=-1;
});
}
if(Object.keys(a).length>Object.keys(b).length){
返回false;
}
for(a中的变量k){
如果(!(b中的k)){
返回false;
}
如果(!deepHas(a[k],b[k])){
返回false;
}
}
返回true;
}
变量a1={
foo:[a',b',c'],
酒吧:“酒吧”,
巴兹:{
巴兹:{
巴兹:“wee”
}
}
};
变量b1={
foo:[a',b',c',d'],
酒吧:“酒吧”,
巴兹:{
巴兹:{
巴兹:“wee”,
不管怎样:“wat”
}
},
好:'测试'
};
console.log('b1拥有所有a1',deepHas(a1,b1));
变量a2={
foo:[a',b',c'],
酒吧:“酒吧”,
巴兹:{
巴兹:{
巴兹:“wee”
}
}
};
变量b2={
foo:[a',b',c'],
巴兹:{
巴兹:{
巴兹:“wee”
}
}
};
log('b2没有所有的a2',!deepHas(a2,b2));
log(“[“a”,“b”]有[“b”]”,deepHas([“b”],[“a”,“b”]);
log({foo:[“a”,“b”]}有{foo:[“b”]}),deepHas({foo:[“b”]},{foo:[“a”,“b”]})代码>寻找外部库等问题与堆栈溢出无关,因此使用这样的请求开始和结束您的问题可能会很快结束。更重要的是,若你们自己尝试这样的事情,当你们陷入困境时,把你们所做的张贴出来。在这一点上,有人会提供帮助,或者你可能会得到一些评论,说“你试过仅仅使用x了吗”这不是重复的,我们可以通过这一行很容易地看到它:if(Object.keys(obj1.length)==Object.keys(obj2.length){return false;};我在我的帖子里列举了两点,感谢第一点。@JoseRicardoBustosM:哇,你抓住我了。我读了那个问题,读了第一个答案,看到它是好的,并试图给它投票。然后出现了一个“您不能为自己的帖子投票”错误:-)但不,它不是重复的,因为这些函数检查深度相等而不是包含。@Bergi好的,我删除了重复的标志,然后。。。。有趣的“你不能为自己的帖子投票”@Bergi-这很容易修复。当然可以:-)应该是b.some(deephas.bind(null,av))
而不是indexOf