Как преобразовать строку в логическое значение в машинописном тексте Angular 4
Я знаю, что не первый, кто спрашивает об этом, и, как я уже упоминал в своем заголовке, я пытаюсь преобразовать строковое значение в логическое значение.
Ранее я поместил некоторые значения в локальное хранилище. Теперь я хочу получить все значения и присвоить все некоторым логическим переменным.
app.component.ts
localStorage.setItem('CheckOutPageReload', this.btnLoginNumOne + ',' + this.btnLoginEdit);
Вот this.btnLoginNumOne
а также this.btnLoginEdit
являются строковыми значениями ("истина, ложь").
mirror.component.ts
if (localStorage.getItem('CheckOutPageReload')) {
let stringToSplit = localStorage.getItem('CheckOutPageReload');
this.pageLoadParams = stringToSplit.split(',');
this.btnLoginNumOne = this.pageLoadParams[0]; //here I got the error as boolean value is not assignable to string
this.btnLoginEdit = this.pageLoadParams[1]; //here I got the error as boolean value is not assignable to string
}
в этом компоненте this.btnLoginNumOn
е и this.btnLoginEdi
t булевы значения;
Я пробовал решения в stackru, но ничего не работает.
Может кто-нибудь помочь мне исправить это.
10 ответов
Способ 1:
var stringValue = "true";
var boolValue = (/true/i).test(stringValue) //returns true
Способ 2:
var stringValue = "true";
var boolValue = (stringValue =="true"); //returns true
Способ 3:
var stringValue = "true";
var boolValue = JSON.parse(stringValue); //returns true
Способ 4:
var stringValue = "true";
var boolValue = stringValue.toLowerCase() == 'true' ? true : false; //returns true
Method 5:
var stringValue = "true";
var boolValue = getBoolean(stringValue); //returns true
function getBoolean(value){
switch(value){
case true:
case "true":
case 1:
case "1":
case "on":
case "yes":
return true;
default:
return false;
}
}
source: http://codippa.com/how-to-convert-string-to-boolean-javascript/
Я пробовал разные значения с JSON.parse(value)
и, кажется, делает работу:
// true
Boolean(JSON.parse("true"));
Boolean(JSON.parse("1"));
Boolean(JSON.parse(1));
Boolean(JSON.parse(true));
// false
Boolean(JSON.parse("0"));
Boolean(JSON.parse(0));
Boolean(JSON.parse("false"));
Boolean(JSON.parse(false));
В вашем сценарии преобразование строки в логическое значение может быть сделано с помощью чего-то вроде someString === 'true'
(как уже было сказано).
Тем не менее, позвольте мне попытаться решить вашу главную проблему: работа с локальным хранилищем.
Локальное хранилище поддерживает только строки в качестве значений; таким образом, хорошим способом его использования будет всегда сериализация ваших данных в виде строки перед сохранением их в хранилище и обратный процесс при их извлечении.
Возможно, приличный формат для сериализации ваших данных - это JSON, поскольку с ним очень легко работать в JavaScript.
Следующие функции могут, таким образом, использоваться для взаимодействия с локальным хранилищем при условии, что ваши данные могут быть сериализованы в JSON.
function setItemInStorage(key, item) {
localStorage.setItem(key, JSON.stringify(item));
}
function getItemFromStorage(key) {
return JSON.parse(localStorage.getItem(key));
}
Ваш пример может быть переписан как:
setItemInStorage('CheckOutPageReload', [this.btnLoginNumOne, this.btnLoginEdit]);
А также:
if (getItemFromStorage('CheckOutPageReload')) {
const pageLoadParams = getItemFromStorage('CheckOutPageReload');
this.btnLoginNumOne = pageLoadParams[0];
this.btnLoginEdit = pageLoadParams[1];
}
Определить расширение: String+Extension.ts
interface String {
toBoolean(): boolean
}
String.prototype.toBoolean = function (): boolean {
switch (this) {
case 'true':
case '1':
case 'on':
case 'yes':
return true
default:
return false
}
}
И импортируйте в любой файл, где вы хотите его использовать '@/path/to/String+Extension'
Я думаю, что это наиболее точно:
function parseBoolean(value?: string | number | boolean | null) {
value = value?.toString().toLowerCase();
return value === 'true' || value === '1';
}
Эта функция преобразует вашу строку в логическое значение
export const stringToBoolean = (str: string | null | undefined) => {
if (!str) {
return false
}
if (typeof str === "string") {
return !["0", "false", "no", "n", "null", "undefined", "nil"].includes(str.toLowerCase().trim())
}
return Boolean(str)
}
Вы также можете попробовать использовать оператор bang bang, если знаете, что это допустимое логическое значение в строке. например, для
let trueAsString = 'true';
let convertedStringToBool = !!trueAsString;
Вы можете использовать это:
let s: string = "true";
let b: boolean = Boolean(s);
просто используйте <<!! >> оператор:
const Text1 = ""
const Text2 = "there is a text"
console.log(!!Text1) // false
console.log(!!Text2) // true