2016-12-01 21 views
0

非常に多くのことがあるので、私はわずかなコードを共有しています。私の質問に答えるだけで十分です。javascript:ORの代わりにIF文を使ってデフォルト値を設定

私は値がOR文で決定されるいくつかの既存のJSを持っています。私はそれをIF文に変換する必要があると思います。両方とも存在する場合、最終的な出力は私に両方の値を与えています。私は "質問"と "名前"の両方の値が存在するところで "質問"をしたいだけです。

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

しかし、私は、そのような声明を達成する方法を知りません。代わりにOR演算子(answerData['question'] || answerData['name'])を使用しての

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

、私は次のような何かをしたいと思います上に貼り付けられた既存のコードの()内にあります。変数/値の名前は常に存在するため、デフォルトにする必要はありません。質問は時間の一部しか定義されていません。そして、私は両方の出現を望んでいない。

これはおそらくここでのクエリの範囲外ですが、もう少し詳細を記入するために、このコードは最終的にトピックと質問のJSONファイルを出力します。トピックには名前の値のみがあり、質問には名前と質問の両方がありますが、私は質問jsonに名前ではなく質問の値を含めるだけです。私はこれがすべてのJSの決定の重要な部分であると確信しています

+2

"*彼らの両方が*存在する場合、最終的な出力は、現在、私の両方の値を与えている" - いいえ、 '||'はそれを決してしません。間違ったことがなければならない。問題を引き起こす実際のコードを教えてください。 – Bergi

+0

条件付きで代入するヘルパー変数、条件付きで返すヘルパー関数、またはインライン式としての3項演算子を使用できますが、どちらも '||'とは異なる動作をしませんオペレーター。 – Bergi

+1

あなたは "**' ** undefined'でないときに '' questionData ['question'] 'を使用しましたか? – 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文が気になるのですか?真理しか考えていなければ、or演算子で十分です。 OPが「両方の値を取得している」場合は、何かが間違っています。私はロジックが変更された場合にリファクタリングを承認し、テストするのが簡単です。 –

+0

ありがとうございます。これは私の頭の中でぼんやりとしていたもので、 'var question'式の外で関数を作成しなければならないということです。 – david

+0

Dave Newtonが正しいです。 JSONで質問と名前の両方を出力しているので、私は見たい場所がありますが、これ以上コードを入力していないので、私は質問した文字の質問に答えました。回答。 – david

関連する問題