152 votes

Comment convertir 1 en vrai ou 0 en faux lors de la récupération du modèle ?

J'ai un modèle qui est défini avec une réponse JSON provenant d'une base de données mysql. Les données du modèle sont définies par true ou false dans un champ booléen/tinyint de la base de données, qui utilise la fonction 1 o 0 .

Dans ma vue, j'ai une liaison qui vérifie la présence d'un booléen avec des caractères de soulignement. _.isBoolean . Bien sûr, lorsque mon modèle reçoit les données, il est défini avec 1 o 0 au lieu de vrai ou faux et le _.isBoolean La vérification échoue.

Existe-t-il un moyen de faire en sorte que ma réponse JSON à partir de mysql soit une valeur booléenne vraie ou fausse au lieu de 1 o 0 ou, mieux encore, existe-t-il un moyen de faire en sorte que mon modèle se mette à jour lors de la récupération (et avant que la vue ne soit rendue) afin d'intégrer les données suivantes true o false en fonction de sa propriété 1 ou 0 ?

Par exemple, les données de mon modèle sont les suivantes {"isChecked":"1"} quand j'en ai besoin {"isChecked":true}

Merci beaucoup pour toute suggestion que vous pourriez avoir !

240voto

Vitaliy Petrychuk Points 5664

Il suffit de convertir string a int con + et convertir le résultat en booléen avec !! :

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

Vous pouvez effectuer cette manipulation dans le parse méthode :

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

UPDATE : 7 ans plus tard, je trouve Number(string) conversion plus élégante. De plus, la mutation d'un objet n'est pas la meilleure idée. Ceci étant dit :

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

104voto

dave Points 12645

Utilisez un double non :

!!1 = true;

!!0 = false;

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

98voto

bmaupin Points 1428

Voici une autre option, plus longue mais peut-être plus lisible :

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

20voto

SomeShinyObject Points 5951

Attribution de la comparaison à la valeur de la propriété

JavaScript

Vous pourriez assigner la comparaison de la propriété à "1"

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

Ceci n'est évalué que pour une valeur String de "1" par contre. D'autres variables s'avèrent fausses, comme un réel typeof number serait fausse. (i.e. obj["isChecked"]=1 )

Si vous vouliez être indiscret à propos de "1" o 1 vous pourriez utiliser :

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

Exemples de sorties

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

Même concept en PHP

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

Les mêmes limitations d'utilisation que celles mentionnées ci-dessus pour JavaScript s'appliquent.

Double pas

Le "double non" fonctionne également. C'est déroutant lorsque les gens le lisent pour la première fois, mais cela fonctionne dans les deux langues pour les valeurs de type entier/nombre. En revanche, elle ne fonctionne pas en JavaScript pour les valeurs de type chaîne de caractères, car elles sont toujours évaluées à 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

2voto

Fire Druid Points 71
Boolean(Number(myVar))

ou

!!+myVar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X