Как преобразовать 1 в истину или 0 в ложь при получении модели

103

У меня есть модель, для которой задан ответ JSON из базы данных mysql. Данные модели устанавливаются с истинным или ложным значением в логическое поле / tinyint в базе данных, которое использует 1или 0.

На мой взгляд, у меня есть привязка, которая проверяет логическое значение с подчеркиванием _.isBoolean. Конечно, когда моя модель получает данные, для нее устанавливается значение true или false 1или 0вместо них, и _.isBooleanпроверка не выполняется.

Есть ли способ, чтобы мой ответ JSON от mysql был логическим значением true или false вместо 1или 0, или, предпочтительно, есть ли способ, чтобы моя модель обновлялась при выборке (и до визуализации представления) для преобразования trueили falseна основе это 1 или 0 собственность?

например, данные моей модели выглядят, {"isChecked":"1"}когда мне нужно{"isChecked":true}

Большое спасибо за любые предложения!

Крис М
источник
какая технология на стороне сервера используется?
Арун П. Джонни,
PHP, ответ записывается с помощью json_encode в результате запроса
Крис М.
пробовали ли вы способом: isChecked = isChecked? true: false
Улуг'бек Розимбоев

Ответы:

198

Все, что вам нужно, это преобразовать stringв intс +и преобразовать результат в логическое значение с помощью !!:

var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked

Проделать эту манипуляцию можно в parseметоде:

parse: function (response) {
  response.isChecked = !!+response.isChecked;
  return response;
}

ОБНОВЛЕНИЕ : 7 лет спустя я считаю Number(string)преобразование более элегантным. Кроме того, изменение объекта - не лучшая идея. Что, как говорится:

parse: function (response) {
  return Object.assign({}, response, {
    isChecked: !!Number(response.isChecked), // OR
    isChecked: Boolean(Number(response.isChecked))
  });
}
Виталий Петричук
источник
18
+1 За конвертацию в intпервую. !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
Терри Янг
79

Используйте двойной not:

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);
Дэйв
источник
2
Это сработало для меня, но по какой-то причине у меня все еще было что-то разобратьvalue = (!!parseInt(value) ? true : false)
Рик
На всякий случай, !!2или любой другой номер = false, правда ?
Элайджа Мок
Нет, !! 2 будет правдой, это будет ложно только для 0
Дэйв
63

Вот еще один вариант, который длиннее, но может быть более читаемым:

Boolean(Number("0")); // false
Boolean(Number("1")); // true
bmaupin
источник
7
Читаемость FTW!
zero_cool,
9
В 2020 году это должно быть ответом
etiennejcharles
14

Присвоение сравнения значению свойства

JavaScript

Вы можете назначить сравнение собственности на "1"

obj["isChecked"] = (obj["isChecked"]==="1");

Это оценивается только для строкового значения "1". Другие переменные оцениваются как ложные, как если typeof numberбы фактические были ложными. (т.е. obj["isChecked"]=1)

Если вы хотите быть неразборчивым в отношении "1"или 1, вы можете использовать:

obj["isChecked"] = (obj["isChecked"]=="1");

Примеры результатов

console.log(obj["isChecked"]==="1"); // true
console.log(obj["isChecked"]===1); // false
console.log(obj["isChecked"]==1); // true
console.log(obj["isChecked"]==="0"); // false
console.log(obj["isChecked"]==="Elephant"); // false

PHP

Та же концепция в PHP

$obj["isChecked"] = ($obj["isChecked"] == "1");

Применяются те же ограничения оператора, что указаны выше для JavaScript.

Double Not

«Двойное не» тоже работает. Это сбивает с толку, когда люди впервые его читают, но он работает на обоих языках для значений целочисленного / числового типа. Однако он не работает в JavaScript для значений строкового типа, поскольку они всегда имеют значение true:

JavaScript

!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false

PHP

echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false
SomeShinyObject
источник
хорошая идея, Кристофер, я смог добиться этого, написав: `this.model.set ('isChecked', (this.model.get ('isChecked') === '1'))` в функции инициализации моего основной вид.
Chris M