Подтвердить что ты не робот

Как преобразовать 1 в true или 0 в false при выборке модели

У меня есть модель, которая установлена с ответом JSON из базы данных MySQL. Данные модели устанавливаются с истинным или ложным значением в логическое поле /tinyint в базе данных, которое использует 1 или 0.

На мой взгляд, у меня есть привязка, которая проверяет логическое значение с подчеркиванием _.isBoolean. Конечно, когда моя модель получает данные, ей _.isBoolean 1 или 0 вместо true или false, и проверка _.isBoolean не выполняется.

В любом случае, правильно ли мой ответ JSON от mysql будет иметь логическое значение true или false вместо 1 или 0, или, предпочтительно, есть ли способ обновить мою модель при извлечении (и перед отображением представления), чтобы привести true или false на основе этого 1 или 0 свойства?

например, мои данные модели выглядят как {"isChecked":"1"} когда мне нужно, чтобы они были {"isChecked":true}

Большое спасибо за любые предложения, которые вы можете иметь!

4b9b3361

Ответ 1

Все, что вам нужно, это преобразовать string в int с помощью + и преобразовать результат в boolean с помощью !!:

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

Вы можете выполнить эту манипуляцию в методе parse:

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

Ответ 2

Используйте double not:

!!1 = true;

!!0 = false;

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

Ответ 3

Здесь еще один вариант, который длиннее, но может быть более читаемым:

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

Ответ 4

Присвоение сопоставления со значением свойства

JavaScript

Вы можете назначить сравнение свойства "1"

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

Это только оценивает значение String "1". Другие переменные evaulate to false, как фактический typeof number будет ложным. (т.е. obj["isChecked"]=1)

Если вы хотите быть безразличным относительно "1" или 1, вы можете использовать:

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

Вывод результатов

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

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

Те же ограничения оператора, что указаны выше для JavaScript, применяются.

Двойной не

Также работает "double not". Это запутывает, когда люди сначала читают его, но он работает на обоих языках для значений типа integer/number. Однако он не работает в JavaScript для значений типа строки, поскольку они всегда оценивают значение 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

Ответ 5

Преобразуйте 1 '1' и 'true' в true а 0 '0' 'false' null и undefined в false

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

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

Вот тестовый модуль:

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: элегантный логический анализ