是否有一个函数来测试对象是否与其他对象匹配?

时间:2014-12-26 16:22:58

标签: javascript underscore.js

我有一个这样的对象,但更复杂:

var obj = 
{
  a: foo,
  b: bar,
  sub:{
    a: foz
    }
}

然后我有一个基于键和值的条件,例如:

{
  a: ^f,
  sub:{
     a: z$
  }
}

是否有一种方法可以检查所有对象属性的条件是否为真。我对chome-only-features或类似下划线的东西也很好。我也可以重构我的条件结构。

1 个答案:

答案 0 :(得分:2)

您可以使用deepEqual()或根据需要进行修改



var deepTest = function (x, y) {
  if ((typeof x == "object" && x != null) && (typeof y == "object" && y != null)) {
    if (Object.keys(x).length != Object.keys(y).length)
      return false;

    for (var prop in x) {
      if (y.hasOwnProperty(prop))
      {  
        if (! deepEqual(x[prop], y[prop]))
          return false;
      }
      else
        return false;
    }

    return true;
  }
  else if(x && (typeof y != "undefined")) return true; else return false;
}

document.write(deepEqual({a:{b:true}},{a:{c:1}}),'<br>');
document.write(deepEqual({a:{b:true}},{a:{b:1}}),'<br>');
document.write(deepEqual({a:{b:false}},{a:{c:1}}),'<br>');
document.write(deepEqual({a:{b:false}},{a:{b:1}}),'<br>');
document.write(deepEqual(true,true),'<br>');
document.write(deepEqual(true,false),'<br>');
document.write(deepEqual(false,false),'<br>');
document.write(deepEqual(false,false),'<br>');
document.write(deepEqual([true],[1]),'<br>');
document.write(deepEqual([true],[]),'<br>');
document.write(deepEqual([true],[]),'<br>');
document.write(deepEqual([true,true],[]),'<br>');
document.write(deepEqual([true,true],[1,2]),'<br>');
&#13;
&#13;
&#13;