wake-up-neo.com

Wie konvertiert man 1 nach dem Abrufen in "true" oder "false"?

Ich habe ein Modell, das eine JSON-Antwort aus einer MySQL-Datenbank enthält. Die Modelldaten werden mit "true" oder "false" in ein boolesches/tinyint-Feld in der Datenbank gesetzt, das 1 oder 0 verwendet. 

Aus meiner Sicht habe ich eine Bindung, die nach einem Boolean mit _.isBoolean des Unterstrichs sucht. Wenn mein Modell die Daten erhält, wird es natürlich mit 1 oder 0 anstelle von true oder false festgelegt, und die _.isBoolean-Prüfung schlägt fehl.

Gibt es sowieso entweder entweder meine JSON-Antwort von mysql korrekt zu sein, sondern einen booleschen true- oder false-Wert anstelle von 1 oder 0, oder vorzugsweise gibt es eine Möglichkeit, mein Modell beim Abrufen (und bevor die Ansicht rendert) aktualisieren zu lassen, um true zu konvertieren. oder false basierend auf der Eigenschaft 1 oder 0?

z.B. Die Daten meines Modells sehen wie {"isChecked":"1"} aus, wenn ich {"isChecked":true} brauche.

Vielen Dank für Ihre Anregungen!

50
Chris M

Sie brauchen nur string in int mit + konvertieren und das Ergebnis mit !! in boolean konvertieren

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

Sie können diese Bearbeitung in der parse-Methode vornehmen:

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

Verwenden Sie ein doppeltes nicht:

!!1 = true;

!!0 = false;

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

Hier ist eine weitere Option, die länger ist, aber lesbarer sein kann:

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

Vergleich des Eigenschaftswerts zuordnen

JavaScript

Sie können den Vergleich der Eigenschaft "1" zuweisen.

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

Dies wird jedoch nur für einen String-Wert von "1" ausgewertet. Andere Variablen werden auf false gesetzt, wie ein tatsächlicher typeof number wäre false. (d. h. obj["isChecked"]=1)

Wenn Sie über "1" oder 1 unauffällig sein möchten, können Sie Folgendes verwenden:

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

Beispielausgaben

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

Gleiches Konzept in PHP

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

Es gelten die gleichen Operator-Einschränkungen wie oben für JavaScript angegeben.

Doppel nicht

Das 'double not' funktioniert auch. Es ist verwirrend, wenn die Leute es zum ersten Mal lesen, aber es funktioniert in beiden Sprachen für Ganzzahl-/Zahlentypwerte. Es funktioniert jedoch nicht in JavaScript für Zeichenfolgentypwerte, da sie immer als wahr ausgewertet werden:

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
6
SomeShinyObject

Konvertieren Sie 1'1' und 'true' in true und 0'0''false'null und undefined in false

function primitiveToBoolean(value?: string | number | boolean | null): boolean {
  if (value === 'true') {
    return true;
  }

  return typeof value === 'string'
    ? !!+value   // we parse string to integer first
    : !!value;
}

Hier ist Unit-Test:

describe('primitiveToBoolean', () => {
  it('should be true if its 1 / "1" or "true"', () => {
    expect(primitiveToBoolean(1)).toBe(true);
    expect(primitiveToBoolean('1')).toBe(true);
    expect(primitiveToBoolean('true')).toBe(true);
  });
  it('should be false if its 0 / "0" or "false"', () => {
    expect(primitiveToBoolean(0)).toBe(false);
    expect(primitiveToBoolean('0')).toBe(false);
    expect(primitiveToBoolean('false')).toBe(false);
  });
  it('should be false if its null or undefined', () => {
    expect(primitiveToBoolean(null)).toBe(false);
    expect(primitiveToBoolean(undefined)).toBe(false);
  });
  it('should pass through booleans - useful for undefined checks', () => {
    expect(primitiveToBoolean(true)).toBe(true);
    expect(primitiveToBoolean(false)).toBe(false);
  });
});

TypeScript-Rezept: Elegant Parse Boolean

0
Andrew