如何转换1为真或0为假的模型获取

我有一个用 mysql 数据库中的 JSON 响应设置的模型。模型数据以 true 或 false 设置为数据库中的 boolean/tinyint 字段,该字段使用 10

在我看来,我有一个用下划线 _.isBoolean检查布尔值的绑定。当然,当我的模型接收到数据时,它被设置为 10,而不是 true 或 false,并且 _.isBoolean检查失败。

有没有一种方法可以让 mysql 的 JSON 响应正确地为布尔值 true 或 false,而不是 10,或者更好的是,有没有一种方法可以让我的模型在获取时(在视图呈现之前)更新自己,以根据它的1或0属性强制转换 truefalse

例如,我的模型的数据看起来像 {"isChecked":"1"}当我需要它是 {"isChecked":true}

非常感谢您的建议!

147234 次浏览

将比较分配给属性值

JavaScript

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

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

但是,这仅计算 "1"的 String 值。其他变量的计算结果为 false,就像实际的 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

使用双不:

!!1 = true;


!!0 = false;


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

你只需要用 +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))
});
}

下面是另一个更长但可读性更强的选项:

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

或者

!!+myVar

另一种解决方法是简单地创建一个包含布尔值的数组,并将相应的布尔值分配给它的索引。让我在下面解释一下:

const bools = [false,true];

使用 int 或 str 访问所需的布尔值。

bools['0'] (str)bools[0] (int)在浏览器中应该可以正常工作,并产生正确的值。我最近用它来设置复选框值。

希望这个有帮助