JS解惑-Object中的key是有序的么?

栏目: JavaScript · 发布时间: 6年前

内容简介:当我们使用for/in遍历一个Object对象的时候,打印的结果是否按key的顺序打印出来呢?答案是:最近在做一个项目的时候,遇到这样一个需求:

当我们使用for/in遍历一个Object对象的时候,打印的结果是否按key的顺序打印出来呢?

答案是: 不一定

背景

最近在做一个项目的时候,遇到这样一个需求:

一个下拉列表中有3个固定选项,包括: -1:全部;0:正常;1:失效

于是,我就定义了一个对象,然后循环这个对象,把结果放到 <option> 上面:

var obj = {
    '-1': '全部',
    '0' : '正常',
    '1' : '失效'
};
复制代码
<!-- Vue代码片段 -->
<select>
    <option v-for="(item, key) in obj" :value="key">{{item}}</option>
</select>

<!-- 结果却是: -->
<!--  0  正常 -->
<!--  1  失效 -->
<!--  -1  全部 -->
复制代码

于是就有了今天这篇文章,且看下文。

解惑

Object的key的 排序 规则到底是什么样子的呢?答案是:

如果key是整数(如:123)或者整数类型的字符串(如:“123”),那么会按照从小到大的排序。除此之外,其它数据类型,都安装对象key的实际创建顺序排序。

var obj = {
    '-1': '全部',
    '0' : '正常',
    '1' : '失效'
};
for (let key in obj) {
     console.log(key, obj[key]);
};
// result
// 0 正常
// 1 失效
// -1 全部
复制代码

另外,如果key中除了整数或者整数类型的字符串外,还含有其它数据类型,则整数放在最前面,比如:

var obj = {
    'a': 111,
    '我' : 222,
    '1' : 333,
    '1.3': 444,
    '3': 555
};
for (let key in obj) {
     console.log(key, obj[key]);
};
// result
// 1 333
// 3 555
// a 111
// 我 222
// 1.3 444
复制代码

解决

那还是上面的问题,我如何让对象按key的顺序输出呢?答案是:

将key转换成非整数类型的字符串,使用的时候再还原。

如果全部是类整数的key,则可以这么做:

// 每个key后面加.转换成字符串
var obj = {
    '-1.': '全部',
    '0.' : '正常',
    '1.' : '失效'
};
for (let key in obj) {
    // ~~ 表示转换成整数,这样上面的key又还原成了-1/0/1
    console.log(~~key, obj[key]);
};
// result
// -1 全部
// 0 正常
// 1 失效
复制代码

但是,如果key是由各种数据类型混合的,那就不能转换成整数了,可以这么做:

// 每个key前面加.转换成字符串
var obj = {
    '.a': 111,
    '.我' : 222,
    '.1' : 333,
    '.1.3': 444,
    '.3': 555
};
for (let key in obj) {
    // 从第1个字符取原始的key
    console.log(key.substring(1), obj[key]);
};
// result
// a 111
// 我 222
// 1 333
// 1.3 444
// 3 555
复制代码

最后

回归到我最初遇到的问题,那就这么解决了:

var obj = {
    '-1.': '全部',
    '0.' : '正常',
    '1.' : '失效'
};
复制代码
<select>
    <option v-for="(item, key) in obj" :value="~~key">{{item}}</option>
</select>
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Black Box Society

The Black Box Society

Frank Pasquale / Harvard University Press / 2015-1-5 / USD 35.00

Every day, corporations are connecting the dots about our personal behavior—silently scrutinizing clues left behind by our work habits and Internet use. The data compiled and portraits created are inc......一起来看看 《The Black Box Society》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具