JS47 Map()的营救:使对象属性有顺序

在对一个对象进行遍历时,每个浏览器都有自己的规则,遍历的顺序是不确定的:

var myObject = {
  z: 1,
  '@': 2,
  b: 3,
  1: 4,
  5: 5
};

for (item in myObject) {
  console.log(item)
}
// 1
// 5
// z
// @
// b

因此,在对对象进行遍历时,不能依赖其遍历的顺序,因为在不同的浏览器可能会有不同的表现。

如果需要按照一定的、统一的顺序遍历,如何实现呢?

如果不考虑兼容性,可以使用ES6的Map结构实现。

Map对象以插入的顺序比那里元素,for...of循环为每一次循环返回一个[key, value]数组。

var myObject = new Map();
myObject.set('z', 1);
myObject.set('@', 2);
myObject.set('b', 3);

for (var [key, value] of myObject) {
  console.log(key, value);
}
// z 1
// @ 2
// b 3

如果要考虑兼容性,那么要么使用两个分开的数组(一个保存key,一个保存value),要么构建一个单属性对象的数组:

// 使用分开的数组
var objectKeys = [z, @, b, 1, 5];
for (item in objectKeys) {
	myObject[item]
}

// 构建一个单属性对象(single-property objects)的数组
var myData = [{z: 1}, {'@': 2}, {b: 3}, {1: 4}, {5: 5}];

参考

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值