我有一个使用mysql数据库的JSON响应设置的模型。模型数据使用true或false设置为数据库中的boolean / tinyint字段,该字段使用1
或0
。
在我看来,我有一个绑定,用于检查带有下划线_.isBoolean
的布尔值。当然,当我的模型收到数据时,它会设置为1
或0
而不是true或false,_.isBoolean
检查失败。
无论如何要么正确地让我的来自mysql的JSON响应是一个布尔值true或false值而不是1
或0
,或者最好是,有没有办法让我的模型更新自己获取(并在视图呈现之前)根据它的1或0属性来投射true
或false
?
e.g。当我需要{"isChecked":"1"}
时,我的模型数据看起来像{"isChecked":true}
非常感谢您提出的任何建议!
答案 0 :(得分:128)
您只需将string
转换为int
+
,然后将结果转换为布尔值!!
:
var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked
您可以使用parse
方法执行此操作:
parse : function (response) {
response.isChecked = !!+response.isChecked;
return response;
}
答案 1 :(得分:54)
使用双倍而不是:
!!1 = true;
!!0 = false;
obj.isChecked = !!parseInt(obj.isChecked);
答案 2 :(得分:26)
这是另一个选项,它更长但可能更具可读性:
Boolean(Number("0")); // false
Boolean(Number("1")); // true
答案 3 :(得分:7)
您可以将属性的比较分配给"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中的相同概念
$obj["isChecked"] = ($obj["isChecked"] == "1");
与上述JavaScript相同的运算符限制适用。
'double not'也有效。当人们第一次阅读它时会让人感到困惑,但它在两种语言中都适用于整数/数字类型值。但它在JavaScript中不适用于字符串类型值,因为它们总是评估为true:
!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false
echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false
答案 4 :(得分:0)
将1
'1'
和'true'
转换为true
和0
'0'
'false'
null
和{{ 1}}到undefined
false
这是单元测试:
function primitiveToBoolean(value?: string | number | boolean | null): boolean {
if (value === 'true') {
return true;
}
return typeof value === 'string'
? !!+value // we parse string to integer first
: !!value;
}
答案 5 :(得分:0)
Boolean(Number(myVar))
或
!!+myVar