从localStorage中提取数字作为数字

时间:2016-10-12 17:46:06

标签: javascript angularjs type-conversion local-storage

我在localStorage中为应用程序存储了很多值,并且需要一种将“字符串”转换回数字的方法 - 如果它是一个数字。想到如果你以后强制使用HTML <input type="number"> on your form, then the data going into the form and extracted from the form IS a number, but once stored - its converted to a string. So to repopulate that字段,你必须读取localStorage值并在重新填充输入字段之前将其转换回一个数字 - 否则你会开始收到大量的敏感警告,有时会出现错误,因为预期会有NUMBERS ,但localStorage正在检索字符串。

我的方法:假设值是作为数字输入的,那么只会存储一个数字(仅数字) - 因此你可以假设只有数字会出现(即使它们是一个字符串)。知道只有数字会回来允许:

var allVariables = {} ;
var reg = new RegExp(/^\d+$/) ;  // this accounts for digits only
for (var x=0; x<localStorage.length;x++) {
  var keyValue = localStorage.getItem(localStorage.key(x)) ;
  if (reg.text(keyValue)) {
    keyValue = parseInt(keyValue) ;
  }
  allVariables[localStorage.key(x)] = keyValue ;
}

我甚至对此进行了扩展以解释真/假布尔...不能轻易使用0/1而不会与数字混淆。我看到的另一种方法是强调密钥名称以识别以后转换的类型:

即:

key1_str
key2_boo
key3_int
key4_obj
key5_flo

然后识别“_xxx”以适当地转换该值。

我要求看到其他人解决这个问题,或者就如何改进它提出建议和建议。我的并不完美......虽然当地的存储都不是......但仍在寻求改进。

3 个答案:

答案 0 :(得分:3)

您可以考虑将整个对象存储到较少数量的存储键中,而不是存储大量的单个键,这些存储键可以在检索时串行到json并进行解析。 JSON方法将保留类型

var obj= {
   id:100,
   anotherProp:'foo'
} 

localStorage.setItem('myObj',JSON.stringify(obj));
var newObj = JSON.parse(localStorage.getItem('myObj'));
console.log(typeof newObj.id)//number

答案 1 :(得分:1)

假设你有"keyName" : "12345"。 棘手的解决方案是var newInt = +localStorage.getItem('keyName') 这个额外的+会将字符串转换为整数。

答案 2 :(得分:0)

尝试转换:

function getProbablyNumberFromLocalStorage(key) {
   var val = localStorage.getItem(key);
   return (isNan(+val) || val==null) ? val  : +val;
}