2016-12-01 29 views
0

Я использую только небольшой код, потому что так много происходит, и я надеюсь, что этого достаточно, чтобы ответить на мой вопрос.javascript: установка значения по умолчанию с инструкцией IF вместо OR

У меня есть несколько существующих JS, где значение определяется оператором OR, и я думаю, что мне нужно преобразовать это в оператор IF. Окончательный результат в настоящее время дает мне оба значения, если они оба существуют, и я хочу только «вопрос», где существуют значения «вопрос» и «имя».

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

Вместо того, чтобы с помощью оператора (answerData['question'] || answerData['name']) OR, я хотел бы сделать что-то похожее на следующее:

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

Но, я не знаю, как я мог бы совершить такое заявление в пределах () в существующем коде, вставленном выше. Переменная/значение name всегда присутствует, поэтому нет риска для этого. Вопрос определен только некоторое время. И я не хочу, чтобы оба появлялись.

Это, вероятно, вне сферы моего запроса здесь, но для заполнения немного более подробной информации, этот код в конечном итоге выводит файлы JSON для тем и вопросов. Темы имеют только значения имен, а вопросы имеют как имена, так и вопросы, но мне нужны только вопросы json, содержащие значения вопросов, а не имена. Я уверен, что это ключевая часть во всех JS для определения

+2

"* Конечный результат в настоящее время дает мне оба значения, если они оба существуют *" - нет, '||' никогда бы этого не сделал. Должно быть что-то еще, что неправильно. Покажите нам свой фактический код, который создает проблему, пожалуйста. – Bergi

+0

Вы можете использовать вспомогательную переменную (которую вы условно назначаете), вспомогательную функцию (из которой вы возвращаете условно) или просто тернарный оператор (как встроенное выражение), но ни один из них не будет отличаться от '||' оператор. – Bergi

+1

Возможно, вы имели в виду «Использовать' questionData ['question'] ', если это ** не **' undefined'?? – Bergi

ответ

2

Создайте функцию и получите оттуда значение.

Необходимо помнить объем функции:

Пример Snippet:

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? Если мы рассматриваем только правду, то достаточно или оператора. Если ОП «получает оба значения», то что-то еще не так. Я одобряю рефакторинг в случае изменения логики, и это проще проверить. –

+0

Спасибо. Это то, что я имел смутно в голове, что мне придется создать функцию вне уравнения «var question», просто не было точно, как это сделать. – david

+0

Дейв Ньютон прав. В другом месте мне нужно посмотреть, потому что я все еще выдаю как вопрос, так и имя в моем JSON, но здесь я не предлагал больше кода, и это отвечало на вопрос, который я задал, поэтому я отметил его как принятый ответ. – david