2016-11-23 4 views
0

Я использую этот код JavaScript для добавления элемента в массив объектов, содержащих критерии поиска.JavaScript inline If/Else с конкатенацией строки возвращает неожиданное значение

Моя цель - использовать «T00: 00: 00», если критерием поиска является начало диапазона дат и «T23: 59: 59», если это конец диапазона дат.

//key = "Created", 
//value = "2016-11-23", 
//to_from = "from" 
collectedValues.push({ 
       key: key, 
       value: (value + 
        (to_from === "to") ? 
         "T23:59:59" : // when searching by date range, 
         "T00:00:00"), // "from" must be 00:00 and 
             // "to" must be 23:59 
       isPartialMatch: false, 
       toFrom: to_from 
      }); 

Результирующий массив объектов имеет неправильное значение для свойства «значение» объекта. Предполагается, что он будет объединен, например: «2016-11-23T23: 59: 59».

Вместо этого он просто имеет значение «23:59:59».

enter image description here

Похоже, это что-то делать с кодом форматирования и разбиения на несколько строк.

Конечно, я мог бы использовать полную нотацию if/else, но почему эта нотация не работает?

+2

'+' имеет более высокий приоритет, чем '?'. Вы не делаете то, что считаете себя. Ваш код эффективно '(значение + (to_from ===" to "))? "T23: 59: 59": "T00: 00: 00" ' – Phylogenesis

+1

Имеет ли переменная' значение' данные? – VadimB

+2

Попробуйте (значение + ((to_from === "to")? "T23: 59: 59": "T00: 00: 00")) и убедитесь, что 'значение' не пусто – Weedoze

ответ

1

Просто измените порядок кронштейнов. Условие Inline IF не обязательно должно быть заключено в скобки, как обычный синтаксис if (something).

Этот код будет работать:

  collectedValues.push({ 
       key: key, 
       value: value + (to_from === "to" ? 
         "T23:59:59" : // when searching by date range, 
         "T00:00:00"), // "from" must be 00:00 and 
             // "to" must be 23:59 
       isPartialMatch: false, 
       toFrom: to_from 
      }); 
1

Я не понимаю, почему не работает, но вы можете использовать присоединиться() для Implode данных в строке

collectedValues = []; 
key = "Created", 
value = "2016-11-23", 
to_from = "from" 
collectedValues.push({ 
       key: key, 
       value: [value, 
        (to_from === "to") ? 
         "T23:59:59" : 
         "T00:00:00"].join(""), 
       isPartialMatch: false, 
       toFrom: to_from 
      }); 

 Смежные вопросы

  • Нет связанных вопросов^_^