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

How to convert 1 to true or 0 to false upon model fetch

本文关键字:转换 true 或将 false 获取 模型      更新时间:2023-09-26

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

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

是否有任何方法可以正确地将我从mysql得到的JSON响应设置为布尔值true或false,而不是10,或者有没有一种方法可以让我的模型在获取时(以及在视图渲染之前(更新自己,以根据其1或0属性强制转换truefalse

例如,当我需要{"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)在浏览器中应该可以正常工作,并产生正确的值。我最近用它来设置复选框值。

希望这对有帮助