今天遇到一个依赖健值数组读取排序的问题
接口开发同事返回的json格式是这样的, 我在小程序调用接口读取数组遍历之后发现排序乱了
{
"price_info": {
"08": {
"01": {
"price": 9999,
"booked": 0
},
"02": {
"price": 99999,
"booked": 0
},
"03": {
"price": 99999,
"booked": 0
},
"04": {
"price": 99999,
"booked": 0
},
"05": {
"price": 99999,
"booked": 0
},
"06": {
"price": 99999,
"booked": 0
}
},
"09": {
"01": {
"price": "15",
"booked": 1
},
"02": {
"price": "15",
"booked": 1
},
"03": {
"price": "15",
"booked": 0
},
"04": {
"price": "15",
"booked": 0
},
"05": {
"price": "15",
"booked": 0
},
"06": {
"price": "15",
"booked": 0
}
},
"10": {
"01": {
"price": "15",
"booked": 1
},
"02": {
"price": "15",
"booked": 0
},
"03": {
"price": "15",
"booked": 0
},
"04": {
"price": "15",
"booked": 0
},
"05": {
"price": "15",
"booked": 0
},
"06": {
"price": "15",
"booked": 0
}
}
}
}
这是我的一个数组,price_info 健值提供是08、09、10 的排序
在我的项目里我用for in 遍历数组也会出现排序错误
我通过https://jsoneditoronline.org/ 在线解析, 发现结果变成这样了,排序的08、09 排到后面
接着我将08,09 前面的0去掉,发现读取的顺序正常了
解决方案
http://w3help.org/zh-cn/causes/SJ9011
for-in 语句无法保证遍历顺序,应尽量避免编写依赖对象属性顺序的代码。如果想顺序遍历一组数据,请使用数组并使用 for 语句遍历。 如果想按照 定义的次序遍历对象属性
如果遇到需要依赖对象的排序,最好采用数组形式,例如上面的json可以改为
{
"price_info": [
{"key":"08",
"info": {
"01": {
"price": 9999,
"booked": 0
},
"02": {
"price": 99999,
"booked": 0
},
"03": {
"price": 99999,
"booked": 0
},
"04": {
"price": 99999,
"booked": 0
},
"05": {
"price": 99999,
"booked": 0
},
"06": {
"price": 99999,
"booked": 0
}
}
},
{"key":"09",
"info": {
"01": {
"price": 9999,
"booked": 0
},
"02": {
"price": 99999,
"booked": 0
},
"03": {
"price": 99999,
"booked": 0
},
"04": {
"price": 99999,
"booked": 0
},
"05": {
"price": 99999,
"booked": 0
},
"06": {
"price": 99999,
"booked": 0
}
}
},
{"key":"10",
"info": {
"01": {
"price": 9999,
"booked": 0
},
"02": {
"price": 99999,
"booked": 0
},
"03": {
"price": 99999,
"booked": 0
},
"04": {
"price": 99999,
"booked": 0
},
"05": {
"price": 99999,
"booked": 0
},
"06": {
"price": 99999,
"booked": 0
}
}
}
]
}
然后通过for 遍历,(不用 for in) 遍历出来的健值再判断使用即可