数据
const data = {
"11": 0,
"12": 0,
"13": 0,
"14": 0,
"15": 0,
"16": 0,
"17": 0,
"18": 0,
"19": 0,
"20": 0,
"21": 0,
"22": 0,
"23": 0,
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": 0,
"9": 1646,
"10": 0,
};
代码
const ret = Object.keys(data);
console.info(ret);
结果
结果按照数字从小到大排序了,我需要按照后端给的顺序输出到页面,因为使用的highcharts 需要将key赋值给xAxis.categories,value赋值给series,但是事与愿违。为什么不能按照给定的顺序输出呢?5分钟彻底理解Object.keys解释道:
对于上面那个问题先给出结论,Object.keys在内部会根据属性名key的类型进行不同的排序逻辑。分三种情况:
- 如果属性名的类型是Number,那么Object.keys返回值是按照key从小到大排序
- 如果属性名的类型是String,那么Object.keys返回值是按照属性被创建的时间升序排序。
- 如果属性名的类型是Symbol,那么逻辑同String相同
也有人给了解决办法如何按原顺序打印出对象的属性?,对json字符串进行解析但是我拿到的是json,在JSON.stringify的时候顺序也被排序了,跟Object.kesy的行为一致。进入了死胡同。最后只能让后端改数据结构。待议
网友评论