美文网首页
Object.keys 数字顺序问题

Object.keys 数字顺序问题

作者: 别过经年 | 来源:发表于2020-07-27 10:52 被阅读0次

数据

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的行为一致。进入了死胡同。最后只能让后端改数据结构。待议

相关文章

网友评论

      本文标题:Object.keys 数字顺序问题

      本文链接:https://www.haomeiwen.com/subject/tqtzlktx.html