素材牛VIP会员
js对象是按键自动排序的吗?下面这个对象怎么让-1再最前面啊?
 懒***材  分类:Node.js  人气:717  回帖:6  发布于6年前 收藏

如上图,怎么让-1这个对象成为第一个对象呢?
js对象按键自动排序,为什么-1不是第一个呢?

 标签:node.jsjavascript

讨论这个帖子(6)垃圾回帖将一律封号处理……

Lv6 码匠
黄***得 其它 6年前#1

Chrome Opera 中使用 for-in 语句遍历对象属性时会遵循一个规律:
它们会先提取所有 key 的 parseFloat 值为非负整数的属性,然后根据数字顺序对属性排序首先遍历出来,然后按照对象定义的顺序遍历余下的所有属性。
其它浏览器则完全按照对象定义的顺序遍历属性。

至于在chrome上打印某个对象,你可以很清楚看到 这些对象是按照ASCII码的顺序排序的,打印下 window或者document对象看看

注意,这些都是规律,当然真正的js对象属性是没有顺序的。

Lv3 码奴
gu***di 软件测试工程师 6年前#2

这种肯定是一个列表,为什么不用数组而是用对象呢

浏览器解析规则大致是 先按照纯数字,这里不包括 + - 号这样的字符,然后再按照ASCII或其他的排序字符串。

像 -1 这种的,浏览器判定为字符串,当然在数字最后了

Lv5 码农
mo***99 产品经理 6年前#3

js的对象没有顺序。像你这种key值都是数字的情况可以用数组来代替对象。

Lv5 码农
陌***4 站长 6年前#4

既然想要顺序、为什么不是数组包含若干对象呢、JSON格式

[
    {},
    {},
    {}
]
Lv4 码徒
ji***ca JS工程师 6年前#5

之前一直不知道js对象是没有顺序的,只是浏览器解析时给的顺序。长见识了,谢谢大家!
最后转换成数组解决了。

Lv1 新人
海***人 Web前端工程师 6年前#6

这个排序不同的浏览器实现可能不同,大多数都是字符串的编码顺序排序,而不是按照字面的大小排序。如果想顺序执行,可以考虑这样来:

Object.keys(obj).sort(function(i1,i2){return i1-i2}).forEach(function(item){
  console.log(obj[item]);//这里可以顺序得到想要的值
})
 文明上网,理性发言!   😉 阿里云幸运券,戳我领取