2016-12-01 78 views
0

我只是分享了一小段代碼,因爲發生了很多事情,我希望這足以回答我的問題。javascript:使用IF語句設置默認值而不是OR

我有一些現有的JS,其中值是用OR語句確定的,我想我需要將它轉換爲IF語句。如果兩者都存在,最終的輸出結果會給我兩個值,而我只想要「問題」存在「問題」和「名稱」兩個值。

var question = new fq.Question(questionData.answerId, topicId, 
     questionData['question'] || questionData['name'], 
     questionData['text']); 

除了使用OR運算符(answerData['question'] || answerData['name']),我想要做類似如下的內容:

if (questionData['question'] is undefined) { 
    use questionData['question']; 
} else { 
    use instead questionData['name'] 
} 

但是,我不知道我怎麼可能完成這樣的聲明在上面粘貼的現有代碼中的()內。名稱變量/值總是存在的,所以沒有違約的風險。問題只是在某些時候定義。我從來都不希望兩者都出現。

這可能超出了我在這裏的查詢範圍,但爲了填寫更多的細節,此代碼最終輸出用於主題和問題的JSON文件。主題只包含名稱值,而問題包含名稱和問題,但我只希望json的問題包含問題值,而不是名稱。我很確定這是所有JS中確定的關鍵部分

+2

「*最終輸出目前給我的這兩個值,如果他們都存在*」 - 不, '||'永遠不會那樣做。一定有其他的東西是錯的。請向我們展示您的實際代碼,以解決問題。 – Bergi

+0

你可以使用一個輔助變量(你有條件分配的),一個輔助函數(你有條件地返回)或者一個三元運算符(作爲一個內聯表達式),但是這兩者的行爲都不同於'||'運營商。 – Bergi

+1

你是不是指「使用'questionData ['question']'當它不是** undefined'」? – Bergi

回答

2

創建一個函數並從那裏獲取值。

需要記住的功能範圍:

示例代碼段:

var that = this; 
 
var question = new fq.Question(questionData.answerId, topicId, 
 
    that.getValue(), 
 
    questionData['text']); 
 

 
function getValue() { 
 
    if (questionData['question']) { //null and undefined both are false 
 
    return questionData['question'] 
 
    } else { 
 
    return questionData['name'] 
 
    } 
 
}

+2

爲什麼要麻煩if語句?如果我們只考慮真實性,那麼運營商就足夠了。如果OP是「獲取兩個值」,那麼其他的東西就是錯誤的。如果邏輯改變,我確實會批准重構,並且測試起來更容易。 –

+0

謝謝。這就是我在我腦海中模糊的地方,我不得不在「var question」等式之外創建一個函數,只是不確定如何去做。 – david

+0

戴夫牛頓是正確的。還有一些地方我需要看,因爲我仍然在輸出JSON中的問題和名稱,但是我沒有在這裏提供更多的代碼,這回答了我問的字面問題,所以我將它標記爲接受回答。 – david