【发布时间】:2013-08-21 12:56:24
【问题描述】:
我有一个像这样的多维对象:
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: {}
};
【问题讨论】:
-
想要的结果和你原来的对象一样。属性未排序。如果您希望图像按特定顺序排列,则必须使用数组。
-
@FelixKling 我知道他们没有订单,但我稍后在循环中使用这个对象来渲染 html 中的背景图像 - 属性一个接一个地渲染,假订单很重要对我来说。
-
那么,您正在使用
for...in循环来迭代属性吗?它们的迭代顺序因浏览器而异。你想做的事情在技术上是不可能的。 -
不是真的 - 我稍后会将它填充到一个数组中 - 这只是一些简化的代码 - 我的主要问题是如何在一个对象中切换两个键名。我知道如果我这样做可能会出现的所有问题。
-
问题是你没有切换任何东西。原始对象与您想要的对象完全相同。属性在对象中没有位置,因此
{a:1, b:2}与{b:2, a:1}相同。仅当您想要获取现有属性值并将其分配给新属性名称时,“重命名”属性才有意义。但是您没有这样做,您的name -> value映射保持不变。
标签: javascript object key