我有一个像这样的多维对象:
var elements = {
front: {
"1": {
"backgroundImage": "url(images/elements/pig.png)",
},
"2": {
"backgroundImage": "url(images/elements/star.png)",
},
"3": {
"backgroundImage": "url(images/elements/fish.png)",
}
},
top: {},
left: {},
right: {}
};
我需要在这个对象中切换两个元素,所以我这样做:
var temp = elements[front][2];
elements[front][2] = elements[front][3];
elements[front][3] = temp;
给了我(切换鱼和星 - 但只有属性而不是对象键):
var elements = {
front: {
"1": {
"backgroundImage": "url(images/elements/pig.png)",
},
"2": {
"backgroundImage": "url(images/elements/fish.png)",
},
"3": {
"backgroundImage": "url(images/elements/star.png)",
}
},
top: {},
left: {},
right: {}
};
如何重命名对象键?
期望的结果:
var elements = {
front: {
"1": {
"backgroundImage": "url(images/elements/pig.png)",
},
"3": {
"backgroundImage": "url(images/elements/fish.png)",
},
"2": {
"backgroundImage": "url(images/elements/star.png)",
}
},
top: {},
left: {},
right: {}
};
答案 0 :(得分:0)
您希望对对象中的键进行排序,但不能这样做,因为对象没有订单。这就是JavaScript规范所说的。
如果您依赖排序,有些情况会发生意外情况。
在Chrome中,如果您定义此对象:
var a = {
a: "b",
1: 2
};
你会得到
var a = {
1: 2,
a: "b"
};
代替(这是同一个对象,因为对象没有顺序)。
对象上的 for .. in
循环非常具有误导性,因为你认为他们有一个订单,但实际上你可以编写一个有效的JavaScript实现,每次你做一个随机化的订单{ {1}}
如果要按特定顺序迭代键,例如:按字母顺序或自然排序,首先必须将对象转换为数组(确实有一个顺序),然后迭代它。
你可以想象一个像:
这样的函数for .. in