モデルのフェッチ時に1をtrueに、または0をfalseに変換する方法


97

mysqlデータベースからのJSON応答で設定されたモデルがあります。モデルデータは、データベースのboolean / tinyint型のフィールドにtrueまたはfalseに設定している使用しています10

私の見解では、下線付きのブール値をチェックするバインディングがあります_.isBoolean。もちろん、モデルがデータを受け取ると、データはtrueまたはfalseで設定される1か、0代わりに設定され、_.isBooleanチェックは失敗します。

とにかく、mysqlからのJSON応答を1orの代わりにブール値のtrueまたはfalseに正しく設定0する方法はありますか、またはできれば、フェッチtrueまたはビューがレンダリングされる前に、モデルをキャストまたはにfalse基づいて更新する方法がありますそれは1または0プロパティですか?

たとえば、モデルのデータは{"isChecked":"1"}、必要なときに次のようになります。{"isChecked":true}

あなたが持っているかもしれない提案をありがとうございました!


サーバー側のテクノロジーは何ですか?
アルンPジョニー2013年

PHP、応答はクエリ結果のjson_encodeで書き出されています
Chris M

isChecked = isChecked?true:false
Ulug'bek Ro'zimboyev

回答:


191

必要なのはstringintwith with +に変換し、結果をbooleanに変換するだけです!!

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))
  });
}

18
+1に変換するため int最初にます。 !!+"1"; // true!!+"0"; // false!!+1; // true!!+0; // false
テリー・ヤング

76

double notを使用します。

!!1 = true;

!!0 = false;

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

2
これは私にとってはうまくいきましたが、何らかの理由で私はそれを解析する必要がありましたvalue = (!!parseInt(value) ? true : false)
Rick

ただ念のために、!!2または他の数字= falseでよろしいですか?
エリヤモック

いいえ、!! 2はtrueになります。0の場合のみfalseになります
dave

59

これはもう少し長くて読みやすいオプションです:

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

6
読みやすさFTW!
zero_cool

7
2020年には、これが必要です
etiennejcharles

13

プロパティ値への比較の割り当て

JavaScript

プロパティの比較を次のように割り当てることができます "1"

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

"1"ただし、これはString値のみを評価します。他の変数は、実際の値がfalseになるようにfalseに評価され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

PHPで同じ概念

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

上記のJavaScriptと同じ演算子の制限が適用されます。

ダブルノット

「double not」も機能します。人々が最初に読んだときは混乱しますが、整数/数値型の値については両方の言語で機能します。ただし、文字列型の値は常にtrueと評価されるため、JavaScriptでは機能しません。

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

良いアイデアクリストファー、私は次のように書くことでこれを達成できました: `this.model.set( 'isChecked'、(this.model.get( 'isChecked')=== '1'))`私の初期化関数でバックボーンビュー。
Chris M
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.