Model getirildiğinde 1'i doğruya veya 0'ı yanlışa dönüştürme


107

Bir mysql veritabanından JSON yanıtı ile ayarlanmış bir modelim var. Model veriler, kullanımları veritabanında bir Boole / Tinyint alanı içine doğru veya yanlış ayarlanır 1ya da 0.

Benim görüşüme göre, alt çizgi içeren bir boolean için kontrol eden bir bağlamam var _.isBoolean. Elbette, modelim verileri aldığında, doğru veya yanlış yerine 1veya ile ayarlanır 0ve _.isBooleankontrol başarısız olur.

Ya doğru MySQL benim JSON yanıtı yerine bir boolean doğru veya yanlış değerini olmak için yine de var mı 1yoksa 0, ya da tercihen, getirme (ve bakış önce kılar) döküm için üzerine benim modeli güncellemesini, kendisini bir yol var trueya falsedayalı 1 veya 0 mülk?

Örneğin, modelimin verileri {"isChecked":"1"}ihtiyacım olduğu zamanki gibi görünüyor{"isChecked":true}

Her türlü öneriniz için çok teşekkür ederiz!


sunucu tarafı teknolojisi nedir?
Arun P Johny

PHP, yanıt sorgu sonucuna bir json_encode ile yazılıyor
Chris M

şu yolu denediniz mi: isChecked = isChecked? true: false
Ulug'bek Ro'zimboyev

Yanıtlar:


201

Tek ihtiyacınız dönüştürmek olduğunu stringiçin intbirlikte +ve birlikte boolean sonucu dönüştürmek !!:

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

Bu manipülasyonu parseyöntemde yapabilirsiniz:

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

GÜNCELLEME : 7 yıl sonra Number(string)dönüşümü daha zarif buluyorum . Ayrıca bir nesneyi mutasyona uğratmak en iyi fikir değildir. Söyleniyor ki:

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

18
+1 Birinciye dönüştürmek için int. !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
Terry Young

83

İkili değil kullanın:

!!1 = true;

!!0 = false;

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

2
Bu benim için çalıştı ama nedense hala dışarı ayrıştırmak zorunda bir I vardıvalue = (!!parseInt(value) ? true : false)
Rick

Emin olmak için !!2ya da başka bir numara = false, değil mi?
Elijah Mock

Hayır, !! 2 doğru olur, yalnızca 0 için yanlış olur
dave

66

İşte daha uzun olan ancak daha okunaklı olabilecek başka bir seçenek:

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

7
Okunabilirlik FTW!
zero_cool

9
2020'de bu bir asnwer olmalı
etiennejcharles

14

Mülk Değerine Karşılaştırma Atama

JavaScript

Mülkün karşılaştırmasını aşağıdakilere atayabilirsiniz: "1"

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

Bu yalnızca "1"gerçi bir String değeri için değerlendirilir . Diğer değişkenler, gerçek gibi yanlış olarak değerlendirilir typeof number. (yani obj["isChecked"]=1)

"1"Veya konusunda ayrım gözetmek istemiyorsanız 1, şunları kullanabilirsiniz:

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

Örnek Çıktılar

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'de aynı kavram

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

Yukarıda JavaScript için belirtilen aynı operatör sınırlamaları geçerlidir.

Çift Değil

'Çifte değil' de çalışır. İnsanlar onu ilk okuduğunda kafa karıştırıcıdır, ancak tamsayı / sayı türü değerleri için her iki dilde de çalışır. Bununla birlikte, her zaman doğru olarak değerlendirildiklerinden, dize türü değerleri için JavaScript'te çalışmaz:

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

iyi fikir Christopher, bunu şu yazımla başardım: `` this.model.set ('isChecked', (this.model.get ('isChecked') === '1')) omurga görünümü.
Chris M

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.