У меня есть модель, для которой задан ответ 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}
Большое спасибо за любые предложения!
источник
Ответы:
Все, что вам нужно, это преобразовать
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)) }); }
источник
int
первую.!!+"1"; // true
,!!+"0"; // false
,!!+1; // true
,!!+0; // false
Используйте двойной not:
!!1 = true; !!0 = false; obj.isChecked = !!parseInt(obj.isChecked);
источник
value = (!!parseInt(value) ? true : false)
!!2
или любой другой номер= false
, правда ?Вот еще один вариант, который длиннее, но может быть более читаемым:
Boolean(Number("0")); // false Boolean(Number("1")); // true
источник
Присвоение сравнения значению свойства
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
источник