测试对象是否相等和/或对象是否有更多的关键点,但仍然与共同的关键点相等
Test if objects are equal and/or object has more keys but are still equal to the ones in common
我有三个对象,对象1:{a: 1, b: 2}
;对象2:{a: 1, b: 3}
;object3:{a: 1, b: 2, c: 3}
,并且希望将最后两个与第一个进行比较,并且只在它们相等的情况下返回它们(只要它包含的键彼此相等,它是否有更多的值也没关系)。
所以,我希望归还反对意见3。
您可以使用Array#all
:检查a
中的每个键是否不在b
中,或者是否具有相同的值
function unifiable(a, b) {
return Object.keys(a) . all(function(key) { return a[key] === b[key]; });
}
没有必要明确检查b
中是否存在key
,因为如果b
不包含key
,则b[key]
将是未定义的,这将不等于a
中key
的任何值。
以上内容将在b
的原型链中找到key
的值,因此如果这是一个问题,则需要对b.hasOwnProperty(key)
进行显式检查。
如果你想让NaN
被认为是相等的,你必须单独检查。
这将简单地检查两个对象是否一致。为了真正按照您的意愿统一它们,一个简单的想法是
unifiable(a, b) && Object.assign(a, b)
其中Object.assign
可以替换为$.extend
、_.extend
、Ember.merge
或您喜欢的其他对象合并。
给你(但请解决你的问题)。这需要两个参数,并返回它们是否可以统一(即它们共同的属性是否具有相同的值)。不过,这只是一个肤浅的比较。让它递归进行深度比较留给读者练习;)
function unifiable(a, b){
for(var prop in a) if(a.hasOwnProperty(prop)
&& b.hasOwnProperty(prop) && a[prop] !== b[prop])
return false
return true // will happen if the loop ended without returning
}
您可以使用此函数
使的功能
- 检查自己的属性
- 检查对象a的属性是否存在于对象b中
-
最后将第一个对象自身的属性与属性匹配第二个对象的。
function copareobjectkeys(a,b) { for(var k in a) { if(a.hasOwnProperty(k) && b.hasOwnProperty(k) && b[k]!=a[k]) return false; } return true }
现在有了这三个对象
a ={a: 1, b: 2};
b= {a: 1, b: 3};
c= {a: 1, b: 2, c: 3}
将c与a进行比较,将b与进行比较
copareobjectkeys(c,a) //true
copareobjectkeys(b,a) //false
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 测试对象是否相等和/或对象是否有更多的关键点,但仍然与共同的关键点相等
- Angular.js通过对象关键点上的ng选项进行跟踪
- 设置选项对象关键点:值对以实现带第二个y轴的动态打印
- 设置可变对象关键点
- 当对象的值为数组时,反转该对象的关键点和值
- 角度,观察对象中的特定关键点
- 将多个对象添加到单个关键点
- 将对象添加到Firebase时设置自己的关键点-AngularFire
- 遍历对象并拾取关键点/值
- 如何获取最里面的对象的关键点