我怎样才能更优雅地做几个 _.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);
我有一个这样的对象
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);