是否可以进一步简化以下javascript
声明。要求是如果任何输入是否定的,它应该在块内执行语句。我想知道我是否可以多次避免< 0
并且只使用一次
if (Number(cash.value) < 0 || Number(cheque.value) < 0 || Number(charge.value) < 0 || Number(card.value) < 0) {
doSomething();
}
我简化为这个逻辑
if ((Number(Cash.value) || Number(Cheque.value) || Number(Charge.value) || Number(Card.value)) < 0)
但它不起作用且不符合要求。上述逻辑有效但有重复的&lt; 0逻辑
答案 0 :(得分:6)
您可以尝试这样做
var numbers = [Cash.value, Cheque.value, Charge.value, Card.value];
if(numbers.some(value => Number(value) < 0)){
doSomething();
}
例如,正在 ES6
中工作
var numbers = [11, 12, -1,-7];
if(numbers.some(value => value < 0)){
console.log('Found !!!');
}
对于 IE 9 ,您可以编写一个函数并使用
function anyNegative(numbers){
for(var i = 0; i < numbers.length; i++){
if(numbers[i] < 0){
return true;
}
}
return false;
}
var numbers = [11, 12, -1,-7];
if(anyNegative(numbers)){
console.log('Found !!!');
}
答案 1 :(得分:2)
您可以简化删除,例如Number()
- +符号将包含数字的字符串转换为实际数字,我们仍然可以使用更快的逻辑操作数:
if (+cash.value < 0 || +cheque.value < 0 || +charge.value < 0 || +card.value) < 0) {
doSomething();
}
关于第二行的问题 -
此行不起作用的原因(除了可能的拼写错误,因为JavaScript区分大小写):
if ((Number(Cash.value) || Number(Cheque.value) || Number(Charge.value) || Number(Card.value)) < 0)
是将此Number(Cash.value)
转换为布尔值,即。如果值为0则为false,则其他任何内容都将转换为true。因此,如果数字不为0,加号或减号,它们将通过,除了最后一次只按预期通过的测试。每个值都必须单独测试。
建议:除非您需要并行检查多个值,否则请避免使用数组(无论是ES6还是更早版本)。这比直接进行布尔检查要慢得多,特别是在解析并且没有JavaScript优化的旧浏览器中。
答案 2 :(得分:0)
怎么样:
if([Cash,Cheque,Charge,Card].some(obj => Number(obj.value) < 0)) {
doSomething();
}
答案 3 :(得分:0)
或者将它作为一个功能,以防你在更多的地方需要它。需要N个输入来验证
https://jsfiddle.net/2L1L7ncj/
function isAnyArgumentNegative(){
var args = Array.prototype.slice.call(arguments);
return args.some(function(a){
return Number(a) < 0;
});
}
答案 4 :(得分:0)
我想,不是真的。
你的第二个陈述不起作用,因为你基本上检查所有的值 - 除了最后一个 - 是真实的,然后只有最后一个是否定的。
如果要使代码更具可读性,可以添加辅助函数:
protected async Task<T> ParseJson<T>(HttpResponseMessage response) =>
JsonConvert.DeserializeObject<T>(await response.Content.ReadAsStringAsync(), Settings);
然后在你的if语句中使用它。
从技术上讲,你可以制作这样的函数:
function isNegative(value) {
return Number(value) < 0;
}
但我认为第一个选择会提供更好的代码。