我有一个像这样的对象
myObject:{"property1": "valueX",
"property2": "valueY",
"property3": "valueZ",
"property4": "valueV",
"property5": "valueW"}
我希望确保我的所有对象属性名称都不匹配多个字符串。
我找到的最直观的方法就是这个:
if( !_.has(myObject, "TestingValue1")&&
!_.has(myObject, "TestingValue2")&&
!_.has(myObject, "TestingValue3")&&
!_.has(myObject, "TestingValue4")){
//do something
}
但如果我有太多的属性名称需要检查,它就会变成相当大的代码。
我正在努力想出一个更优雅的解决方案。我觉得它几乎可以,但我似乎没有工作(它总是返回true)。这是:
var TestingValues = ["TestingValue1", "TestingValue2", "TestingValue3"]
if (!_.every(TestingValues, _.partial(_.has, myObject))){
//do something
}
你能告诉我有什么问题吗?我该如何申报TestingValues
?
编辑:
@Sergiu Paraschiv我在myObject
和测试数组中使用了不同的值,只是为了让它更容易阅读。当然我用相同的值测试它。
你是对的,我才意识到它有效。起初我没有,因为它没有按预期工作。我把事情搞混了:如果字符串数组中的任何项与{{1}的任何属性相匹配,我想返回 false }
答案 0 :(得分:3)
你可以这样做:
var TestingValues = [ "TestingValue1", "TestingValue2", "TestingValue3" ];
if(!_.isEmpty(_(myObject).pick(TestingValues)){...
或者你自己建议:
if (!_.some(TestingValues, _.partial(_.has, myObject)))
答案 1 :(得分:0)
替代:
function gatherData()
{
var name = window.prompt('Please enter the name of the participant:');
name = name.replace(/\s+/g, '');
if ((/[^A-Z\s\-\']/gi.test(name)) || (name == '') || (name == 'undefined'))
{
alert ('You must enter a valid name! ');
return;
}
var points = window.prompt('Please enter the achieved points of the participant:');
points = parseInt(points, 10);
if ((/[^0-9\s\-\']/gi.test(points)) || (points == ''))
{
alert ('You must enter a valid number! ');
return;
}
participant.push({name: name, points: points});
createChart();
};
答案 2 :(得分:0)
你可以尝试
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);