2017-08-23 63 views
-3

這是一個非常虛擬的問題,我想這裏的所有專家。寫作聰明Javascript

我有一堆if語句(16),我試圖找到一種方法來寫更少的代碼48行,因爲我相信這是可能的。

我已經閱讀無處不在,如果/如果陳述是不好的做法。

那麼如何以這種聰明的方式寫這一堆代碼?感謝

if (!latitude || typeof latitude == 'undefined') { 
    latitude == 'undefined'; 

    } else if(!longitude || typeof longitude == 'undefined') { 
    longitude == 'undefined'; 

    } else if(!name || typeof name == 'undefined') { 
    name == 'undefined'; 

    } else if(!adresseNum || typeof adresseNum == 'undefined') { 
    adresseNum == 'undefined'; 

    } else if(!adresseVille || typeof adresseVille == 'undefined') { 
    adresseVille == 'undefined'; 

    } else if(!adresseDpt || typeof adresseDpt == 'undefined') { 
    adresseDpt == 'undefined'; 

    } else if(!adresseRg || typeof adresseRg == 'undefined') { 
    adresseRg == 'undefined'; 

    } else if(!adresseFr || typeof adresseFr == 'undefined') { 
    adresseFr == 'undefined'; 

    } else if(!adresseCp || typeof adresseCp == 'undefined') { 
    adresseCp == 'undefined'; 

    } else if(!telephone || typeof telephone == 'undefined') { 
    telephone == 'undefined'; 

    } else if(!horaires || typeof horaires == 'undefined') { 
    horaires == 'undefined'; 

    } else if(!note || typeof note == 'undefined') { 
    note == 'undefined'; 

    } else if(!reviewFinale || typeof reviewFinale == 'undefined') { 
    reviewFinale == 'undefined'; 

    } else if(!website || typeof website == 'undefined') { 
    website == 'undefined'; 

    } else if(!types || typeof types == 'undefined') { 
    types == 'undefined'; 

    } else { 
    console.log('All fields OK'); 
    } 
+0

''switch''聲明可能會幫助你。 https://www.w3schools.com/js/js_switch.asp – Will

+1

你確定'else if'模式嗎?是不是獨立於檢查和分配的值? –

+0

創建函數 – Amit

回答

0

隨着ES6,你可以使用一個對象的所有變量鍵值對,然後用Array#every迭代和分配上falsy值undefined並與if statement檢查結果。

var data = { latitude, longitude, name, adresseNum, adresseVille, adresseDpt, adresseRg, adresseFr, adresseCp, telephone, horaires, note, reviewFinale, website, types }; 

if (Object.keys(data).every(k => data[k] || (data[k] = 'undefined', false))) { 
    console.log('All fields OK'); 
} 
0

每變量本身定義或它從另一個對象或類似var telephone = obj.telephone來?

,如果這是你可以做一些這樣的案例:

var ok = true; 
for (var o in obj) { 
    if (!obj[o]) { 
     obj[o] == 'undefined'; 
     ok = false; 
    } 
} 

if (ok) { 
    console.log('all fields are ok'); 
} 
3
var isOk = [ 
    latitude, 
    longtitude, 
    name, 
    adresseNum, 
    adresseVille, 
    adresseDpt, 
    adresseRg, 
    adresseFr, 
    adresseCp, 
    telephone, 
    horaires, 
    note, 
    reviewFinale, 
    website, 
    types 
].every(function (value) { 
    return !!value; 
}); 

if (isOk) { 
    console.log('All fields OK'); 
} 

但我認爲你最好將所有變量對象或窗體

+0

使用es6這可能很容易輕微更改您的答案 – user7951676

+0

@ user7951676,我不太明白在哪裏ES6將簡化某些在這裏,你能給我一個線索嗎? – Andrey

+0

你可以把它們放到{var1,var2}這樣的對象中,而且鍵將是變量名,而不是for循環,除非有一個對象方法遍歷所有的鍵 – user7951676

0

可能工作的一個選項是在參數解構中使用默認值。基本上你會檢查每個變量是否未定義(順便說一下,如果其中一個值爲'false',會發生什麼?)。
這是具體針對這種情況,雖然...

function functionWithSomeLogic({ 
    latitude = 'undefined', 
    longitude = 'undefined', 
    name = 'undefined', 
    adresseNum = 'undefined' 
    // ... and the rest of the variables 
}) { 
    // Do whatever here, all the arguments are initialized or have the string value of 'undefined' 
} 

順便說一下,如果不是設置的默認值,你想拋出一個異常

const throwArg = argName => throw new Error(`Argument missing: ${argName}`); 

function functionWithSomeLogic({ 
    latitude = throwArg('latitude'), 
    longitude = throwArg('longitude'), 
    name = throwArg('name'), 
    adresseNum = throwArg('adresseNum') 
    // ... and the rest of the variables 
}) { 
    // Do whatever here, all the arguments are initialized, if one of them 
    // had been undefined, an appropriate exception will be thrown before this body 
} 
2

,你可以做一個函數,檢查它們都是這樣的

var isDefined = [latitude, longtitude, name, adresseNum, adresseVille, adresseDpt, adresseRg, adresseFr, adresseCp, telephone, horaires, note, reviewFinale, website, types].every(function (value) {return !!value;}); 
0

一個簡單的es6函數可以做到這一點。正如@Andrey指出的那樣。

const areDefined = (...args) => args.every(elm => !!elm); if(areDefined(latitude, longitude, name/*, ...*/)) { console.log('All fields OK'); }