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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duola8789/article/details/83657648

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

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}];

参考

猜你喜欢

转载自blog.csdn.net/duola8789/article/details/83657648