js将本地localStorage取到的值,输出为json(有点小难度)

localStorage[1]=23
localStorage[2]=235
localStorage[4]=56
localStorage[7]=41
本地有这些值,现在要把这些值重新组合成JSON(序号1-20,不知道哪些有,哪些没有)
要求结果如下:
{"c1":23,"c2":235,"c4":56,"c7":41}

ensleep 代码中的 localStorage 全部拼写成了 localStroage;当 key 不存在的时候会输出 undefined;整个代码最后输出一个 string,并不是 json object。


var json = {}, json_sorted = {}, keys = [];

for(var k in localStorage) {
/^(?:[1-9]|1[0-9]?|20)$/.test(k)
&& (keys.push(k), json["c" + k] = localStorage[k]);
}

// 到这里为止已经得到 json object
// 输出:Object {c4=56, c2=236, c1=23, c7=41}
// console.log(json);


// 下面按 key 排序, c1, c2, c3...
keys.sort(function(a, b) {return a - b;});
for(var k in keys) {
for(var i in json) {
i.replace(/c/, "") == keys[k] && (json_sorted[i] = json[i]);
}
}

// 输出:Object {c1=23, c2=236, c4=56, c7=41}
// console.log(json_sorted);

追问

你好,非常抱歉,测试OK了,非常感谢,你写的太精妙太详细了。
但我还有一点小问题,输出的需要是字符串,而不能再是json了,第一步该怎么改?

追答

// {"c4":"56","c2":"236","c1":"23","c7":"41"}
json = JSON.stringify(json);

// {"c1":"23","c2":"236","c4":"56","c7":"41"}
json_sorted = JSON.stringify(json_sorted);

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-13
var s='{';
var first=1;
for(i=0;i<localStroage.length;i++)
{
if(first==1)
{
if(localStroage[i]!="")s=s+'"C'+i+'":'+'"'+localStroage[i]+'"';
first=0;
}
else
{
if(localStroage[i]!="")s=s+',"C'+i+'":'+localStroage[i];
}
}
s=s+'}';大概就是这样哦,上面的那个取长度的函数你查一下是不是,算法就是这样的,很清楚了。写js一定要相信没有做不到的,只有不想做和不敢做的。加油!!!