Jak przekonwertować 1 na prawdę lub 0 na fałsz po pobraniu modelu


103

Mam model, który jest ustawiony z odpowiedzią JSON z bazy danych mysql. Dane modelu są ustawiane z wartością true lub false w polu boolean / tinyint w bazie danych, które używa 1lub 0.

Moim zdaniem mam powiązanie, które sprawdza wartość logiczną z podkreśleniem _.isBoolean. Oczywiście, kiedy mój model otrzymuje dane, jest ustawiany z 1lub 0zamiast true lub false, a _.isBooleansprawdzenie kończy się niepowodzeniem.

Czy istnieje sposób, aby moja odpowiedź JSON z mysql była poprawnie logiczną wartością true lub false zamiast 1lub 0, lub najlepiej, czy istnieje sposób, aby mój model zaktualizował się po pobraniu (i przed renderowaniem widoku) do rzutowania truelub falsena podstawie to jest nieruchomość 1 czy 0?

np. dane mojego modelu wyglądają tak, jak {"isChecked":"1"}tego potrzebuję{"isChecked":true}

Bardzo dziękuję za wszelkie sugestie!


jaka jest używana technologia po stronie serwera?
Arun P Johny

PHP, odpowiedź jest zapisywana z kodem json_encode w wyniku zapytania
Chris M

czy próbowałeś na drodze: isChecked = isChecked? true: false
Ulug'bek Ro'zimboyev

Odpowiedzi:


198

Wszystko, czego potrzebujesz, to przekonwertować stringna intz +i przekonwertować wynik na wartość logiczną za pomocą !!:

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

Możesz wykonać tę manipulację w parsemetodzie:

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

AKTUALIZACJA : 7 lat później Number(string)konwersja wydaje mi się bardziej elegancka. Mutowanie obiektu również nie jest najlepszym pomysłem. Biorąc to pod uwagę:

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

18
+1 za konwersję na intpierwszy. !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
Terry Młody

79

Użyj podwójnego nie:

!!1 = true;

!!0 = false;

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

2
To działało dla mnie, ale z jakiegoś powodu musiałem to przeanalizowaćvalue = (!!parseInt(value) ? true : false)
Rick

Dla pewności, !!2czy jakakolwiek inna liczba = false, prawda?
Elijah Mock

Nie, !! 2 byłoby prawdą, będzie fałszywe tylko dla 0
dave

63

Oto kolejna opcja, która jest dłuższa, ale może być bardziej czytelna:

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

7
Czytelność FTW!
zero_cool

9
W 2020 roku powinno to być powiadomienie
etiennejcharles

14

Przypisywanie porównania do wartości właściwości

JavaScript

Możesz przypisać porównanie właściwości do "1"

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

Oblicza się to tylko dla wartości String równej "1". Inne zmienne oceniają jako fałszywe, tak jak rzeczywiste typeof numberbyłyby fałszywe. (tj. obj["isChecked"]=1)

Jeśli chcesz być nieokreślony "1"lub 1możesz użyć:

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

Przykładowe wyniki

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

Ta sama koncepcja w PHP

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

Mają zastosowanie te same ograniczenia dotyczące operatora, jak podano powyżej dla JavaScript.

Podwójnie nie

Funkcja „podwójne nie” również działa. Jest to mylące, gdy ludzie czytają go po raz pierwszy, ale działa w obu językach dla wartości typu integer / number. Jednak nie działa w JavaScript dla wartości typu string, ponieważ zawsze są one oceniane jako prawda:

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

dobry pomysł Christopherze, udało mi się to osiągnąć pisząc: `this.model.set ('isChecked', (this.model.get ('isChecked') === '1'))` w funkcji inicjalizacji mojego widok kręgosłupa.
Chris M
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.