วิธีการแปลง 1 เป็นจริงหรือ 0 เป็นเท็จเมื่อดึงโมเดล


107

ฉันมีโมเดลที่ตั้งค่าด้วยการตอบสนอง JSON จากฐานข้อมูล mysql ข้อมูลที่มีการตั้งค่ารูปแบบที่มีจริงหรือเท็จลงในเขตข้อมูลแบบบูล / TINYINT ในฐานข้อมูลซึ่งใช้หรือ10

_.isBooleanในมุมมองของฉันฉันมีผลผูกพันการตรวจสอบว่าสำหรับบูลกับขีด แน่นอนเมื่อโมเดลของฉันได้รับข้อมูลมันจะถูกตั้งค่าด้วย1หรือ0แทนที่จะเป็นจริงหรือเท็จและการ_.isBooleanตรวจสอบล้มเหลว

มีอยู่แล้วหรือไม่ที่จะมีการตอบสนอง JSON ของฉันอย่างถูกต้องจาก mysql เป็นค่าบูลีนจริงหรือเท็จแทน1หรือ0หรือควรมีวิธีที่จะให้โมเดลของฉันอัปเดตตัวเองเมื่อดึง (และก่อนที่จะแสดงผลการดู) เพื่อแคสต์trueหรือfalseตาม เป็น 1 หรือ 0 คุณสมบัติ?

เช่นข้อมูลของโมเดลของฉันดูเหมือนว่า{"isChecked":"1"}เมื่อไหร่ที่ฉันต้องการ{"isChecked":true}

ขอบคุณมากสำหรับคำแนะนำใด ๆ ที่คุณมี!


เทคโนโลยีฝั่งเซิร์ฟเวอร์ใช้อะไร
Arun P Johny

PHP การตอบกลับจะถูกเขียนออกมาด้วย json_encode ในผลการสืบค้น
Chris M

คุณได้ลองใช้วิธี: isChecked = isChecked หรือไม่จริง: เท็จ
Ulug'bek Ro'zimboyev

คำตอบ:


201

ทั้งหมดที่คุณต้องแปลงstringไปintด้วย+และแปลงผลให้ boolean กับ!!:

var response = {"isChecked":"1"};
response.isChecked = !!+response.isChecked

คุณสามารถทำการปรับแต่งนี้ได้ในparseวิธีการ:

parse: function (response) {
  response.isChecked = !!+response.isChecked;
  return response;
}

UPDATE : 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
เทอร์รี่หนุ่ม

83

ใช้ double not:

!!1 = true;

!!0 = false;

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

2
สิ่งนี้ใช้ได้ผลสำหรับฉัน แต่ด้วยเหตุผลบางอย่างฉันยังคงต้องแยกวิเคราะห์ออกvalue = (!!parseInt(value) ? true : false)
Rick

เพื่อความแน่ใจ!!2หรือหมายเลขอื่น ๆ= falseใช่ไหม?
Elijah Mock

ไม่มี !! 2 จะเป็นจริงก็จะเป็นเท็จ 0
dave

66

นี่เป็นอีกตัวเลือกหนึ่งที่ยาวกว่า แต่อาจอ่านได้ง่ายกว่า:

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

7
ค่าอ่านละเอียด FTW!
zero_cool

9
ในปี 2020 นี้ควรจะเป็นผู้ขึ้น
etiennejcharles

14

กำหนดการเปรียบเทียบกับมูลค่าทรัพย์สิน

JavaScript

คุณสามารถกำหนดการเปรียบเทียบคุณสมบัติให้ "1"

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

สิ่งนี้จะประเมินเฉพาะสำหรับค่า String "1"เท่านั้น ตัวแปรอื่น ๆ ที่แสดงเป็นเท็จเช่นจริง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' ยังใช้งานได้ มันสับสนเมื่อคนอ่านครั้งแรก แต่ใช้ได้ทั้งสองภาษาสำหรับค่าประเภทจำนวนเต็ม / ตัวเลข อย่างไรก็ตามมันไม่ทำงานใน 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.