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 1
lub 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 1
lub 0
zamiast true lub false, a _.isBoolean
sprawdzenie kończy się niepowodzeniem.
Czy istnieje sposób, aby moja odpowiedź JSON z mysql była poprawnie logiczną wartością true lub false zamiast 1
lub 0
, lub najlepiej, czy istnieje sposób, aby mój model zaktualizował się po pobraniu (i przed renderowaniem widoku) do rzutowania true
lub false
na 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!
źródło
Odpowiedzi:
Wszystko, czego potrzebujesz, to przekonwertować
string
naint
z+
i przekonwertować wynik na wartość logiczną za pomocą!!
:var response = {"isChecked":"1"}; response.isChecked = !!+response.isChecked
Możesz wykonać tę manipulację w
parse
metodzie: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)) }); }
źródło
int
pierwszy.!!+"1"; // true
,!!+"0"; // false
,!!+1; // true
,!!+0; // false
Użyj podwójnego nie:
!!1 = true; !!0 = false; obj.isChecked = !!parseInt(obj.isChecked);
źródło
value = (!!parseInt(value) ? true : false)
!!2
czy jakakolwiek inna liczba= false
, prawda?Oto kolejna opcja, która jest dłuższa, ale może być bardziej czytelna:
Boolean(Number("0")); // false Boolean(Number("1")); // true
źródło
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 rzeczywistetypeof number
byłyby fałszywe. (tj.obj["isChecked"]=1
)Jeśli chcesz być nieokreślony
"1"
lub1
moż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
źródło