美文网首页
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