测试对象是否相等和/或对象是否有更多的关键点,但仍然与共同的关键点相等

Test if objects are equal and/or object has more keys but are still equal to the ones in common

本文关键字:关键点 对象 是否 测试      更新时间:2023-09-26

我有三个对象,对象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]将是未定义的,这将不等于akey的任何值。

以上内容将在b的原型链中找到key的值,因此如果这是一个问题,则需要对b.hasOwnProperty(key)进行显式检查。

如果你想让NaN被认为是相等的,你必须单独检查。

这将简单地检查两个对象是否一致。为了真正按照您的意愿统一它们,一个简单的想法是

unifiable(a, b) && Object.assign(a, b)

其中Object.assign可以替换为$.extend_.extendEmber.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