te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - Extracting numbers from localStorage as numbers - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Extracting numbers from localStorage as numbers - Stack Overflow

programmeradmin4浏览0评论

I store a lot of values in localStorage for an app and needed a way of converting the "string" back into a number - IF it was a number. The thought being if you force 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 field later, you must read the localStorage value and convert it back to a number before repopulating the input field - otherwise you start getting a lot of reptitive warnings and sometimes errors because NUMBERS are expected, but localStorage is retrieving strings.

My method: Assuming the value is inputted as a number, then only a number (digits only) will be stored - thus you can assume only numbers will e out (even if they are a string). Knowing only numbers will e back allows for this:

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 ;
}

I even expanded on this to account for true/false booleans...can't use 0/1 easily without get confused with a number. Another method I have seen is underscoring the key name to identify the typeof for later conversion:

ie:

key1_str
key2_boo
key3_int
key4_obj
key5_flo

Then identify the "_xxx" to convert that value appropriately.

I am asking to see others approach to this problem or suggestions and remendations on how to improve it. Mine is not perfect...though neither is localStorage...but still looking for improvement.s

I store a lot of values in localStorage for an app and needed a way of converting the "string" back into a number - IF it was a number. The thought being if you force 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 field later, you must read the localStorage value and convert it back to a number before repopulating the input field - otherwise you start getting a lot of reptitive warnings and sometimes errors because NUMBERS are expected, but localStorage is retrieving strings.

My method: Assuming the value is inputted as a number, then only a number (digits only) will be stored - thus you can assume only numbers will e out (even if they are a string). Knowing only numbers will e back allows for this:

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 ;
}

I even expanded on this to account for true/false booleans...can't use 0/1 easily without get confused with a number. Another method I have seen is underscoring the key name to identify the typeof for later conversion:

ie:

key1_str
key2_boo
key3_int
key4_obj
key5_flo

Then identify the "_xxx" to convert that value appropriately.

I am asking to see others approach to this problem or suggestions and remendations on how to improve it. Mine is not perfect...though neither is localStorage...but still looking for improvement.s

Share Improve this question asked Oct 12, 2016 at 17:46 rolingerrolinger 3,0681 gold badge38 silver badges68 bronze badges 5
  • save it as JSON – Dimava Commented Oct 12, 2016 at 17:50
  • Not certain that would work either, because the localStorage has saved the number 12345 as "12345". Importing or saving it as a JSON (without converstion) would still have it as: "Key" : "12345" versus: "key" : 12345 – rolinger Commented Oct 12, 2016 at 17:54
  • @rolinger not true...copy my answer to your console and run it – charlietfl Commented Oct 12, 2016 at 17:55
  • saved string vill be '"123"' and number will be '123'. Just parse it back. – Dimava Commented Oct 12, 2016 at 17:57
  • Also look into using ngStorage module. It takes care of all setting and getting and parsing as simple as $localStorage.myData = $scope.data – charlietfl Commented Oct 12, 2016 at 18:09
Add a ment  | 

3 Answers 3

Reset to default 10

suppose you have "keyName" : "12345". Tricky solution is:

var newInt = +localStorage.getItem('keyName')

this extra + will convert the string to integer.

Instead of storing lots of single keys you might consider storing whole objects to less numbers of storage keys that you stringfiy to json and parse when retrieving. JSON methods will retain type

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

try to convert:

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

评论列表(0)

  1. 暂无评论