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
Add a comment  | 

6 Answers 6

Reset to default 240

All 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