如何在获取模型时将1转换为true或将0转换为false
How to convert 1 to true or 0 to false upon model fetch
我有一个模型,它是用mysql数据库的JSON响应设置的。模型数据设置为true或false,进入数据库中的布尔值/tinyint字段,该字段使用1
或0
。
在我看来,我有一个绑定,用于检查带下划线的_.isBoolean
的布尔值。当然,当我的模型接收到数据时,它被设置为1
或0
,而不是true或false,并且_.isBoolean
检查失败。
是否有任何方法可以正确地将我从mysql得到的JSON响应设置为布尔值true或false,而不是1
或0
,或者有没有一种方法可以让我的模型在获取时(以及在视图渲染之前(更新自己,以根据其1或0属性强制转换true
或false
?
例如,当我需要{"isChecked":true}
时,我的模型的数据看起来像{"isChecked":"1"}
非常感谢您的任何建议!
您只需要使用+
将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))
});
}
使用双非:
!!1 = true;
!!0 = false;
obj.isChecked = !!parseInt(obj.isChecked);
这里有另一个更长但可读性更强的选项:
Boolean(Number("0")); // false
Boolean(Number("1")); // true
为属性值指定比较
JavaScript
您可以将属性的比较分配给"1"
obj["isChecked"] = (obj["isChecked"]==="1");
不过,这仅对字符串值"1"
进行计算。像实际的typeof number
一样,其他被疏散为false的变量将是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相同的运算符限制。
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
Boolean(Number(myVar))
或
!!+myVar
另一个解决方案是简单地创建一个包含布尔值的数组,并将相应的布尔值分配给它的索引。让我解释一下:
const bools = [false,true];
使用int或str.访问所需的布尔值
bools['0'] (str)
或bools[0] (int)
在浏览器中应该可以正常工作,并产生正确的值。我最近用它来设置复选框值。
希望这对有帮助
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- AngularJS-使用'true'属性
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 当图像转换为本地存储的DataURL时,EXIF被删除
- highcharts:将useUTC=true milliseconds转换为javascript Date对象
- JavaScript 的 (0 == “”) === true 如何与 ECMA-262 类型转换规则一致
- 如何将对正在定义或未定义的变量的检查强制转换为读取True或False的字符串
- 将Coffeescript中的true和false分别转换为1和-1
- JavaScript 类型转换:(true && 1) vs (true | | 1).例如,
- 如何在获取模型时将1转换为true或将0转换为false
- js类型转换和类型强制转换-为什么!!{}[true]不为真
- 将truthy或falsy转换为显式布尔值,即True或False