关于JavaScript 字典是默认键值排序的说明

const dic = {};
    dic['1']='a'
    dic['6'] = 'z'
    dic['5']='c'
    console.log(dic)

上面是一段js代码,控制台输出结果如下:

可以看到js里面默认是以键值进行排序,那我们看看在python里面是不是也默认按照键值排序呢

if __name__ == '__main__':
    dic=dict()
    dic['1']='a'
    dic['6'] = 'z'
    dic['5']='c'
    print(dic)

 输出结果是 {'1': 'a', '6': 'z', '5': 'c'},基于此可以得出结论:不是!

那我在js里面如何得到按插入顺序的字典呢?

很简单,只需要在一系列字典外面套一层列表

const dic = [];
    const key=['1','6','5']
    const value=['a','z','c']
    var t_dic;
    for (let i = 0; i < 3; i++) {
        t_dic = {}
        t_dic[key[i]] = value[i]
        dic.push(t_dic)
    }
    console.log(dic)

第一次插入{’1':'a'} 第二次:{’6‘:’z'} 第三次:{'5':'c'}

最后结果得到了我们想要的

---------------------------2022-5-21补充

const dic = {};
    dic['1']='a'
    dic['6'] = 'z'
    dic['5']='c'
    console.log(dic)

在这里dic其实是一个对象

而我们基于这样的事实:js里面对象的属性“有特别的顺序”:整数属性会被进行排序,其他属性则按照创建的顺序显示

例如:

let codes = {
  "49": "Germany",
  "41": "Switzerland",
  "44": "Great Britain",
  // ..,
  "1": "USA"
};

for(let code in codes) {
  alert(code); // 1, 41, 44, 49
}

可以看出打印的依次是 "1"、"41"...

非整数属性是按照我们定义的顺序进行排序,如下所示:

let user = {
  name: "John",
  surname: "Smith"
};
user.age = 25; // 增加一个

// 非整数属性是按照创建的顺序来排列的
for (let prop in user) {
  alert( prop ); // name, surname, age
}

在这里的整数属性”指的是一个可以在不做任何更改的情况下与一个整数进行相互转换的字符串。

例如:

// Number(...) 显式转换为数字
// Math.trunc 是内建的去除小数部分的方法。
alert( String(Math.trunc(Number("49"))) ); // "49",相同,整数属性
alert( String(Math.trunc(Number("+49"))) ); // "49",不同于 "+49" ⇒ 不是整数属性
alert( String(Math.trunc(Number("1.2"))) ); // "1",不同于 "1.2" ⇒ 不是整数属性

所以,"49" 是一个整数属性名,因为我们把它转换成整数,再转换回来,它还是一样的。但是 “+49” 和 “1.2” 就不行了:

于是我们会想到在整数前面加一个'+',使得整数属性变成非整数属性:

let codes = {
  "+49": "Germany",
  "+41": "Switzerland",
  "+44": "Great Britain",
  // ..,
  "+1": "USA"
};

for (let code in codes) {
  alert( +code ); // 49, 41, 44, 1
}

按照这种思路就可以实现按照属性定义的顺序进行排序!

参考:对象 (javascript.info)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这代码有点上头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值