Как имитировать функциональность оператора SQL Coalesce в Javascript - PullRequest
8 голосов
/ 03 февраля 2012

Мне было интересно, есть ли способ в javascript иметь логику, похожую на оператор coalesce в sql, который будет возвращать данные в указанном порядке, например так:

Select top 1 Coalesce(ColA, ColB, "No Data Found") from TableA;

существует ли элегантный способ решенияс нулевыми значениями в Javascript, так же, как sql возвращает результаты в приведенном выше утверждении?

я знаю, что технически мог бы иметь оператор switch, но для этого потребовался бы некоторый, возможно, ненужный код.

Ответы [ 4 ]

10 голосов
/ 03 февраля 2012

Вы можете использовать ИЛИ.

 var someVar = null || value;
 var otherVar = null || variableThatEvaluatesToNull || functionThatEvaluatesToNull() || value;
3 голосов
/ 03 февраля 2012

Проблема с || - это значения типа 0, которые могут быть желательны. Вы можете написать свою собственную функцию javascript для имитации COALESCE.

function Coalesce() {
  var args = Coalesce.arguments;

  for (var i = 0; i < args.length; ++i) {
    if (null !== args[i])
      return args[i];
  }

  return null;  // No non-null values found, return null
}

Который вы могли бы затем назвать, как ожидалось:

var myNonNullValue = Coalesce(null, objectA, objectB, "defaultValue");
3 голосов
/ 03 февраля 2012

Вы можете использовать «ложные» значения и оператор || (логическое ИЛИ):

var foo = bar || baz;

Выше присваивается значение bar для foo, если bar оценивается как "истинное" значение и baz в противном случае (например, если bar не определено, пусто, ложно и т. Д.).

0 голосов
/ 03 февраля 2012

Вот ссылка на в основном тот же вопрос: Есть ли в JavaScript оператор "null coalescing"?

Это вызов null coalescing.В C # есть нулевой оператор объединения "??"и это то, на что ссылался первоначальный вопросник связанного вопроса.

...