MysqlデータベースからのJSON応答で設定されたモデルがあります。モデルデータは、1
または0
を使用するデータベースのブール/ tinyintフィールドにtrueまたはfalseで設定されます。
私の見解では、アンダースコアの_.isBoolean
でブール値をチェックするバインディングがあります。もちろん、モデルがデータを受信すると、trueまたはfalseではなく1
または0
で設定され、_.isBoolean
チェックは失敗します。
とにかくmysqlからのJSON応答を1
または0
の代わりにブール値のtrueまたはfalseにすることができますか、できればフェッチ時にモデル自体を更新する方法がありますか(そしてビューがレンダリングされる前に)1または0プロパティに基づいてtrue
またはfalse
をキャストしますか?
例えばモデルのデータは、{"isChecked":"1"}
である必要があるとき、{"isChecked":true}
のように見えます
ご意見をお寄せいただきありがとうございます!
必要なのは、+
でstring
をint
に変換し、!!
で結果をブール値に変換することだけです。
var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked
parse
メソッドでこの操作を行うことができます。
parse : function (response) {
response.isChecked = !!+response.isChecked;
return response;
}
二重ではないを使用します:
!!1 = true;
!!0 = false;
obj.isChecked = !!parseInt(obj.isChecked);
長いが読みやすいかもしれない別のオプションを次に示します。
Boolean(Number("0")); // false
Boolean(Number("1")); // true
プロパティの比較を"1"
に割り当てることができます
obj["isChecked"] = (obj["isChecked"]==="1");
ただし、これは"1"
のString値に対してのみ評価されます。他の変数は、実際の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の同じ概念
$obj["isChecked"] = ($obj["isChecked"] == "1");
JavaScriptについて上記で説明したのと同じ演算子の制限が適用されます。
「double not」も機能します。人々が最初にそれを読んだとき混乱しますが、整数/数値型の値に対して両方の言語で動作します。ただし、文字列型の値は常にtrueと評価されるため、JavaScriptでは機能しません。
!!"1"; //true
!!"0"; //true
!!1; //true
!!0; //false
!!parseInt("0",10); // false
echo !!"1"; //true
echo !!"0"; //false
echo !!1; //true
echo !!0; //false
1
'1'
および'true'
をtrue
および0
'0'
'false'
null
および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;
}
ユニットテストは次のとおりです。
describe('primitiveToBoolean', () => {
it('should be true if its 1 / "1" or "true"', () => {
expect(primitiveToBoolean(1)).toBe(true);
expect(primitiveToBoolean('1')).toBe(true);
expect(primitiveToBoolean('true')).toBe(true);
});
it('should be false if its 0 / "0" or "false"', () => {
expect(primitiveToBoolean(0)).toBe(false);
expect(primitiveToBoolean('0')).toBe(false);
expect(primitiveToBoolean('false')).toBe(false);
});
it('should be false if its null or undefined', () => {
expect(primitiveToBoolean(null)).toBe(false);
expect(primitiveToBoolean(undefined)).toBe(false);
});
it('should pass through booleans - useful for undefined checks', () => {
expect(primitiveToBoolean(true)).toBe(true);
expect(primitiveToBoolean(false)).toBe(false);
});
});