如何在模型获取时将1转换为true或0转换为false


97

我有一个使用mysql数据库的JSON响应设置的模型。将模型数据使用true或false设置到数据库中的布尔值/ tinyint字段中,该字段使用10

在我看来,我有一个绑定检查下划线的布尔值_.isBoolean。当然,当我的模型接收到数据时,将其设置为true或false 10代替true或false进行_.isBoolean检查。

无论如何,是否可以正确地使来自mysql的JSON响应成为布尔值true或false而不是1or 0,或者最好是有一种方法使我的模型在获取时(以及在视图呈现之前)进行更新以进行铸造truefalse基于这是1还是0属性?

例如我模型的数据看起来像{"isChecked":"1"}我需要的时候{"isChecked":true}

非常感谢您提出的任何建议!


服务器端使用了什么技术?
阿伦·P·约翰尼

PHP,响应将使用json_encode写入查询结果中
Chris M,

您是否尝试过以下方式:isChecked = isChecked?true:false
Ulug'bek Ro'zimboyev 2013年

Answers:


191

您所需要做的就是将with 转换stringintwith +,并将结果转换为boolean with !!

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
特里扬

76

使用双倍不:

!!1 = true;

!!0 = false;

obj.isChecked = !!parseInt(obj.isChecked);

2
这对我有用,但是由于某种原因,我仍然需要解析它value = (!!parseInt(value) ? true : false)
Rick

只是要确定,!!2还是其他任何数字= false,对不对?
Elijah Mock

不,!! 2是正确的,它只会是0的错误
dave

59

这是另一个更长的选项,但可能更具可读性:

Boolean(Number("0")); // false
Boolean(Number("1")); // true

6
可读性FTW!
zero_cool

7
在2020年,这应该是解决方案
etiennejcharles

13

将比较分配给属性值

的JavaScript

您可以将属性的比较分配给 "1"

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

这只会计算字符串值of "1"。像实际typeof number情况一样,其他变量也将变为false。(即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相同的运算符限制。

双不

“双重不”也有效。人们第一次阅读它时会感到困惑,但对于整数/数字类型值,它同时支持两种语言。但是,它对于字符串类型值在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

好主意克里斯托弗,我能够通过在我的初始化函数中编写“ this.model.set('isChecked',(this.model.get('isChecked')==='1'))`来实现这一点。骨干观点。
克里斯M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.