我怎样才能更优雅地做几个 _.has 检查?

How can I do more elegantly several _.has checks?

我有一个这样的对象

myObject:{"property1": "valueX",
          "property2": "valueY",
          "property3": "valueZ",
          "property4": "valueV",
          "property5": "valueW"}

我想确保 none 我的对象属性名称与多个字符串匹配。

我找到的最直观的方法是这个:

if( !_.has(myObject, "TestingValue1")&&
    !_.has(myObject, "TestingValue2")&&
    !_.has(myObject, "TestingValue3")&&
    !_.has(myObject, "TestingValue4")){
//do something
}

但是如果我有太多 属性 个名字要检查,它就会变成相当大的一段代码。

我正在尝试提出一个更优雅的解决方案。我觉得这几乎没问题,但我似乎没有工作(它总是 return 是真的)。这是:

var TestingValues = ["TestingValue1", "TestingValue2", "TestingValue3"]

if (!_.every(TestingValues, _.partial(_.has, myObject))){
//do something
}

你能告诉我哪里出了问题吗?我应该如何申报 TestingValues?

编辑

@Sergiu Paraschiv 我在 myObject 和测试数组中使用了不同的值,只是为了使其更易于阅读。当然,我用相同的值对其进行了测试。

你是对的,我刚刚意识到它有效。一开始我没有,因为它没有按预期工作。我把事情搞混了:我想 return false 如果 any 字符串数组中的项目匹配 any 的属性 myObject

你可以这样做:

var TestingValues = [ "TestingValue1", "TestingValue2", "TestingValue3" ];

if(!_.isEmpty(_(myObject).pick(TestingValues)){...

或者按照您自己的建议:

if (!_.some(TestingValues, _.partial(_.has, myObject)))

选择:

_some(TestValues, function(test) { return _.indexOf(_.values(myObject), test) != -1});

你可以试试

 var testingValues = ["TestingValue1", "TestingValue2", "TestingValue3"];

 var myObj = {
    "property1": "valueX",
    "property2": "valueY",
    "property3": "valueZ",
    "property4": "valueV",
    "property5": "valuez"
};

var result = _.every(myObj, function(value, key, obj){
    return !_.contains(testingValues, value);
});
console.log(result);