Cách chuyển 1 thành true hoặc 0 thành false khi tìm nạp mô hình


97

Tôi có một mô hình được đặt với phản hồi JSON từ cơ sở dữ liệu mysql. Dữ liệu mô hình được đặt với true hoặc false vào trường boolean / tinyint trong cơ sở dữ liệu, sử dụng 1hoặc 0.

Theo quan điểm của tôi, tôi có một ràng buộc kiểm tra boolean với dấu gạch dưới _.isBoolean. Tất nhiên, khi mô hình của tôi nhận được dữ liệu, nó được đặt bằng 1hoặc 0thay vì đúng hoặc sai và việc _.isBooleankiểm tra không thành công.

Có cách nào để phản hồi JSON của tôi từ mysql một cách chính xác là giá trị đúng hoặc sai boolean thay vì 1hoặc 0, hoặc tốt hơn là có cách nào để mô hình của tôi tự cập nhật khi tìm nạp (và trước khi chế độ xem hiển thị) để truyền truehoặc falsedựa trên không đó là 1 hay 0 thuộc tính?

ví dụ: dữ liệu của mô hình của tôi trông như thế {"isChecked":"1"}nào khi tôi cần{"isChecked":true}

Cảm ơn bạn rất nhiều vì bất kỳ đề xuất nào bạn có thể có!


công nghệ phía máy chủ được sử dụng là gì?
Arun P Johny

PHP, phản hồi đang được viết bằng json_encode trên kết quả truy vấn
Chris M

bạn đã thử theo cách: isChecked = isChecked? true: false
Ulug'bek Ro'zimboyev

Câu trả lời:


191

Tất cả những gì bạn cần là chuyển đổi stringthành intwith +và chuyển đổi kết quả thành boolean với !!:

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

Bạn có thể thực hiện thao tác này trong parsephương thức:

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

CẬP NHẬT : 7 năm sau, tôi thấy Number(string)việc chuyển đổi trở nên thanh lịch hơn. Ngoài ra, đột biến một đối tượng không phải là ý tưởng tốt nhất. Điều đó đang được nói:

parse: function (response) {
  return Object.assign({}, response, {
    isChecked: !!Number(response.isChecked), // OR
    isChecked: Boolean(Number(response.isChecked))
  });
}

18
+1 để chuyển đổi thành intđầu tiên. !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
Terry trẻ

76

Sử dụng kép không:

!!1 = true;

!!0 = false;

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

2
Điều này làm việc cho tôi, nhưng đối với một số lý do tôi đã có một tôi vẫn phải phân tích nó ravalue = (!!parseInt(value) ? true : false)
Rick

Chỉ để chắc chắn, !!2hoặc bất kỳ số nào khác = false, phải không?
Elijah Mock

Không, !! 2 sẽ là sự thật, nó sẽ chỉ là sai số 0
dave

59

Đây là một tùy chọn khác dài hơn nhưng có thể dễ đọc hơn:

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

6
Khả năng đọc FTW!
zero_cool

7
Vào năm 2020, đây sẽ là ngày càng giảm
etiennejcharles

13

Gán So sánh với giá trị tài sản

JavaScript

Bạn có thể chỉ định so sánh tài sản cho "1"

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

Điều này chỉ đánh giá cho một giá trị Chuỗi "1". Các biến khác biến thành false như một biến thực tế typeof numbersẽ là false. (tức là obj["isChecked"]=1)

Nếu bạn muốn tỏ ra bừa bãi về "1"hoặc 1, bạn có thể sử dụng:

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

Kết quả đầu ra mẫu

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

Khái niệm tương tự trong PHP

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

Áp dụng các giới hạn toán tử tương tự như đã nêu ở trên cho JavaScript.

Đôi không

'Double not' cũng hoạt động. Thật khó hiểu khi mọi người lần đầu tiên đọc nó nhưng nó hoạt động ở cả hai ngôn ngữ cho các giá trị kiểu số nguyên / số. Tuy nhiên, nó không hoạt động trong JavaScript đối với các giá trị kiểu chuỗi vì chúng luôn đánh giá là 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

ý kiến ​​hay đấy Christopher, tôi đã có thể đạt được điều này bằng cách viết: `this.model.set ('isChecked', (this.model.get ('isChecked') === '1')) 'trong hàm khởi tạo của tôi khung nhìn xương sống.
Chris M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.