我有一个关联数组(对象),我存储从第三方加载的数据。
// 3rdPartyData is also an associative array
for(var key in 3rdPartyData) {
cookie[key] = 3rdPartyData[key];
}
我的对象最终存储在cookie中,然后在cookie之前加载(或者如果没有cookie则创建{})。
每个页面查看来自第三方的数据在我的cookie数组中添加或更新。
问题:如果我想看看cookie,那么循环是否总是按照他们添加的顺序获得每个键,或者订单是否会被更改?
如果是这样,任何人都可以就如何管理这样的事情提出想法吗?
答案 0 :(得分:0)
for(var key in some_object)
中的键的顺序可以是任意顺序,当然也不总是排序,但您可以强制订单成为您想要的顺序:
for(var key in Object.keys(3rdPartyData).sort(keysSorter) {
cookie[key] = 3rdPartyData[key];
}
keysSorter = function(a, b) {
if (a === b) { // Should not actually be the case when sorting object keys
return 0;
}
// Compare a and b somehow and return 1 or -1 accordingly
return a < b ? 1 : -1;
}
确保Object.keys()
能够正常运作:
Object.keys = Object.keys || function(o) {
var result = [];
for(var name in o) {
if (o.hasOwnProperty(name))
result.push(name);
}
return result;
};