版权声明:本文为博主原创文章,未经博主允许不得转载。 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}];