JS - лучший способ привести значение строки к числу, логическое значение или строку? - PullRequest
0 голосов
/ 29 сентября 2018

Как видно из заголовка, я пытаюсь построить функцию, в которой в качестве входных данных указано строковое значение, и оно возвращает правильное приведенное значение.

Пока я получил это, я думаю, что это выглядит ужасно иесть ощущение, что это может быть решено лучше.

Примеры:

const smartCast = function (value) {
  if (value === 'true') {
    return true;
  }
  if (value === 'false') {
    return false;
  }
  if (!isNaN(value)) {
    return Number(value);
  }

  return value;
};

console.log(smartCast('ahoy!') === 'ahoy!');
console.log(smartCast('hello there') === 'hello there');
console.log(smartCast('412') === 412);
console.log(smartCast('71.3') === 71.3);
console.log(smartCast('true') === true);
console.log(smartCast('false') === false);

Дайте мне знать, если есть случай, который я не принимаю во внимание.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Взгляните на пустую строку, регистр и дату https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN#Examples

0 голосов
/ 29 сентября 2018
function cast(value) {
  if (typeof value !== 'string')
    return value

  // Ignore values that would start an array or object.
  if (/^\s*[{\[]/.test(value))
    return value

  try {
    // Try to parse as some value.
    return JSON.parse(value)
  } catch(e) {
    // If there's an error, we will assume it is just
    // a string.
  }

  return value
}

console.log(typeof cast('false')) // boolean
console.log(typeof cast('true')) // boolean
console.log(typeof cast('1')) // number
console.log(typeof cast('3.14')) // number
console.log(typeof cast('abc')) // string
console.log(typeof cast('[1,2,3]')) // string
console.log(typeof cast('{"abc":1}')) // string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...