重命名javascript对象键

时间:2013-08-21 12:56:25

标签: javascript object key

我有一个像这样的多维对象:

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: {}
};

1 个答案:

答案 0 :(得分:0)

您希望对对象中的键进行排序,但不能这样做,因为对象没有订单。这就是JavaScript规范所说的。

如果您依赖排序,有些情况会发生意外情况。

在Chrome中,如果您定义此对象:

var a = {
    a: "b",
    1: 2
};

你会得到

var a = {
    1: 2,
    a: "b"
};

代替(这是同一个对象,因为对象没有顺序)。

对象上的

for .. in循环非常具有误导性,因为你认为他们有一个订单,但实际上你可以编写一个有效的JavaScript实现,每次你做一个随机化的订单{ {1}}

如果要按特定顺序迭代键,例如:按字母顺序或自然排序,首先必须将对象转换为数组(确实有一个顺序),然​​后迭代它。

你可以想象一个像:

这样的函数
for .. in