Як перетворити 1 на true або 0 на false при виборі моделі


99

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

На мій погляд, у мене є прив'язка, яка перевіряє наявність логічного значення з підкресленням _.isBoolean. Звичайно, коли моя модель отримує дані, вони встановлюються з 1або 0замість true або false і _.isBooleanперевірка не вдається.

Чи є в будь-якому випадку, чи правильно, щоб моя відповідь JSON від mysql була булевим істинним чи хибним значенням замість 1або 0, або, бажано, чи є спосіб, щоб моя модель сама оновлювалась при отриманні (і до подання подання) для передачі trueабо falseна основі це 1 або 0 властивість?

наприклад, дані моєї моделі виглядають так, {"isChecked":"1"}коли мені це потрібно{"isChecked":true}

Дякуємо за будь-які ваші пропозиції!


що використовується технологія на стороні сервера?
Arun P Johny

PHP, відповідь виписується json_encode на результат запиту
Chris M

ти пробував із способом: isChecked = isChecked? true: false
Улугбек Розімбоєв

Відповіді:


193

Все, що вам потрібно, це перетворити stringна за intдопомогою +і перетворити результат на логічний за допомогою !!:

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

Ви можете зробити цю маніпуляцію parseметодом:

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

ОНОВЛЕННЯ : через 7 років я вважаю Number(string)перетворення більш елегантним. Також мутувати об’єкт - не найкраща ідея. Це сумно:

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

18
+1 Для перетворення на intперший. !!+"1"; // true, !!+"0"; // false, !!+1; // true, !!+0; // false
Террі Янг

76

Використовуйте подвійний не:

!!1 = true;

!!0 = false;

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

2
Це спрацювало для мене, але з якихось причин у мене було, мені все одно довелося розібратисьvalue = (!!parseInt(value) ? true : false)
Рік

Щоб бути впевненим, !!2чи будь-яким іншим номером = false, правда?
Елайджа Мак

Ні, !! 2 було б правдою, це буде помилкою лише для 0
Дейв

61

Ось ще один варіант, який довший, але може бути більш читабельним:

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

6
Зчитаність FTW!
zero_cool

7
У 2020 році це має бути відповідь
etiennejcharles

13

Присвоєння Порівняння вартості майна

JavaScript

Ви можете призначити порівняння власності на "1"

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

Це обчислює лише значення рядка, "1"хоча. Інші змінні еволюціонують до значення 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.

Подвійний Ні

"Подвійний не" також працює. Це бентежить, коли люди вперше його читають, але це працює в обох мовах для цілочисельних / числових типів значень. Однак це не працює в 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

гарна ідея, Крістофер, я зміг досягти цього, написавши: `this.model.set ('isChecked', (this.model.get ('isChecked') === '1'))` у функції ініціалізації мого хребетний вигляд.
Chris M
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.