Как преобразовать строку в логическое значение в машинописном тексте 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.btnLoginEdit булевы значения;

Я пробовал решения в 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

Boolean("true") тоже сделает работу

Другие вопросы по тегам