2014-12-01 4 views
0

У меня есть, если оператор в JavaScript, что являетсяJavascript конденсируется, если оператор

if(prop < 0 || trans < 0 || queue < 0 || proc < 0 
    || prop > 1 || trans > 1 || queue > 1 || proc > 1 
    || prop == "" || trans == "" || queue == "" || proc == ""){ 

Есть ли способ, чтобы уплотнить это? Для prop, trans, queue и proc. Я хочу создать, если заявление, если значения не попадают быть между 0 и 1, или если он имеет пустое строковое значение

+0

Являются ли эти переменные гарантированными строками? –

+0

Ну, я получаю их значения 'document.getElementById ('prop'). Value', и пользователь должен знать, чтобы вводить целые числа. – Bijan

+1

@Bijan: Тогда это строка. Вы должны сначала разобрать его. –

ответ

4

Строительство прочь Jordan's answer:

var checkThese = [prop, trans, queue, proc]; 
var result = checkTruthinessOf(checkThese); 

function checkTruthinessOf(things) { 
    return things.every(function(el) { 
     return (el < 0 || el > 1 || el === ""); 
    }); 
} 

См Array.prototype.every()

+2

Мне это очень нравится –

+0

Я забыл про '.every', это круто. –

4
var checkThese = [prop, trans, queue, proc]; 
var result = checkTruthinessOf(checkThese); 

function checkTruthinessOf(things) { 
    var returnValue = false; 
    [].forEach.call(things, function(thing){ 
     if (thing < 0 || thing > 1 || thing == "") returnValue = true; 
    }); 
    return returnValue; 
}; 
+1

Почему бы не 'checkThese.forEach (function (thing) {'? Почему вам нужен '.call' там? –

+0

Просто синтаксис, который я использую чаще всего. Думаю, Дуг Крокфорд на самом деле предлагает его –

+0

Кроме того,' return true; 'inside обратный вызов 'forEach' ничего не сделает! Это не вернется из вашей функции' checkTruthinessOf'. –

1

Я взял эту практику из jQuery. Он устраняет лишний массив и просто передает столько аргументов, сколько вам нравится. Затем используйте функцию катка, чтобы проверить все это сразу.

var result = checkTruthinessOf(prop, trans, queue, proc); 

function checkTruthinessOf(/*unlimited arguments*/) { 
    return Array.prototype.every.call(arguments, function(thing) { 
     return (thing < 0 || thing > 1 || thing === ""); 
    }); 
} 
Смежные вопросы