0

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

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

1 回答 1

0

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

如果您依赖排序,在某些情况下会发生意想不到的事情。

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

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

你会得到

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

相反(这是同一个对象,因为同样,对象没有顺序)。

for .. in对象上的循环非常具有误导性,因为您认为它们有顺序,但实际上您可以编写一个有效的 JavaScript 实现,每次执行时随机化顺序for .. in

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

你可以想象一个像这样的函数:

object_iterate(my_object, function (key, value) {
    // do things
}, natural_order_key_sort);
于 2013-08-21T13:05:16.527 回答