admin管理员组文章数量:1134241
I have a model that is set with a JSON response from a mysql database. The model data is set with true or false into a boolean/tinyint field in the database, which uses 1
or 0
.
In my view, I have a binding that checks for a boolean with underscore's _.isBoolean
. Of course, when my model receives the data, it is set with 1
or 0
instead of true or false and the _.isBoolean
check fails.
Is there anyway to either correctly have my JSON response from mysql be a boolean true or false value instead of 1
or 0
, or preferably, is there a way to have my model update itself upon fetch (and before the view renders) to cast true
or false
based on it's 1 or 0 property?
e.g. my model's data looks like {"isChecked":"1"}
when I need it to be {"isChecked":true}
Thank you greatly for any suggestions you may have!
I have a model that is set with a JSON response from a mysql database. The model data is set with true or false into a boolean/tinyint field in the database, which uses 1
or 0
.
In my view, I have a binding that checks for a boolean with underscore's _.isBoolean
. Of course, when my model receives the data, it is set with 1
or 0
instead of true or false and the _.isBoolean
check fails.
Is there anyway to either correctly have my JSON response from mysql be a boolean true or false value instead of 1
or 0
, or preferably, is there a way to have my model update itself upon fetch (and before the view renders) to cast true
or false
based on it's 1 or 0 property?
e.g. my model's data looks like {"isChecked":"1"}
when I need it to be {"isChecked":true}
Thank you greatly for any suggestions you may have!
Share Improve this question edited Oct 18, 2018 at 13:30 D. Schreier 1,7981 gold badge24 silver badges34 bronze badges asked May 1, 2013 at 5:29 Chris MChris M 4,1154 gold badges21 silver badges26 bronze badges 3- what is the server side technology used? – Arun P Johny Commented May 1, 2013 at 5:30
- PHP, the response is being written out with a json_encode on the query result – Chris M Commented May 1, 2013 at 5:34
- did you try with the way: isChecked=isChecked?true : false – Ulug'bek Commented May 1, 2013 at 6:00
6 Answers
Reset to default 240All you need is convert string
to int
with +
and convert the result to boolean with !!
:
var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked
You can do this manipulation in the parse
method:
parse: function (response) {
response.isChecked = !!+response.isChecked;
return response;
}
UPDATE: 7 years later, I find Number(string)
conversion more elegant. Also mutating an object is not the best idea. That being said:
parse: function (response) {
return Object.assign({}, response, {
isChecked: !!Number(response.isChecked), // OR
isChecked: Boolean(Number(response.isChecked))
});
}
Use a double not:
!!1 = true;
!!0 = false;
obj.isChecked = !!parseInt(obj.isChecked);
Here's another option that's longer but may be more readable:
Boolean(Number("0")); // false
Boolean(Number("1")); // true
Assigning Comparison to property value
JavaScript
You could assign the comparison of the property to "1"
obj["isChecked"] = (obj["isChecked"]==="1");
This only evaluates for a String value of "1"
though. Other variables evaulate to false like an actual typeof number
would be false. (i.e. obj["isChecked"]=1
)
If you wanted to be indiscrimate about "1"
or 1
, you could use:
obj["isChecked"] = (obj["isChecked"]=="1");
Example Outputs
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
Same concept in PHP
$obj["isChecked"] = ($obj["isChecked"] == "1");
The same operator limitations as stated above for JavaScript apply.
Double Not
The 'double not' also works. It's confusing when people first read it but it works in both languages for integer/number type values. It however does not work in JavaScript for string type values as they always evaluate to 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
Boolean(Number(myVar))
or
!!+myVar
Another work around is to simply create an array holding the booleans and assigning the corresponding boolean to it's index. Let me explain below:
const bools = [false,true];
Access the boolean you want with either int or str.
bools['0'] (str)
or bools[0] (int)
should work just fine in the browser and yield the correct value. I recently used this for setting a checkbox value.
Hope this helped
本文标签: javascriptHow to convert 1 to true or 0 to false upon model fetchStack Overflow
版权声明:本文标题:javascript - How to convert 1 to true or 0 to false upon model fetch - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736764911a1951760.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论