如何用js实现json数据key值的排序问题

有一组json数据在进行for循环插入到dom时,
图片描述

var tt = data.serach_house_price;//json数据
var html3 = '';
for(var i in tt) {
        html3 +='<li data-sorce = '+i+'>'+tt[i]+'</li>';
}

输出结果如图所示,最后一个key循环到第一个位置了,如何对它们按大小进行重新排序呢?

图片描述

阅读 6.9k
4 个回答
var tt = {
'0-40': '40万以下',
'40-60': '40-60万',
'60-80': '60-80万',
'80-100': '80-100万',
'100-150': '100-150万',
'150-200': '150-200万',
'200-300': '200-300万',
'300-400': '300-400万',
'400': '400万以上',
}
var sortKeys = Object.keys(tt).sort(function(i1,i2){
  return i2.split('-')[0] - i1.split('-')[0] 
});
var html3 = '';
for(var i=0, len=sortKeys.length; i<len; i++) {
        html3 +='<li data-sorce = '+sortKeys[i]+'>'+tt[sortKeys[i]]+'</li>\n';
}
console.log(html3);

看看这样满足吗?

可以参考这篇文章:http://w3help.org/zh-cn/cause...
实际中遍历得顺序在各个浏览器无法保证一致,因此不建议用for in去遍历。不过可以考虑把for in的结果保存到数组,再把数组排个序,然后遍历这个数组去输出

var html3 = [];
for(var i in tt) {
     html3.push('<li data-sorce = ',i,'>',tt[i],'</li>');
}
console.log(htm3.reverse().join(""));

建议从存储数据格式上去修改。

修改成以下形式:

[
    {name:'0-40', value:'40万以下'},
    {name:'40-60', value:'40-60万'},
    {name:'60-80', value:'60-80万'},
    ...
]
推荐问题