2013-07-08 50 views
0

我有一个关联数组(对象),以至于我存储从第三方加载的数据。关联数组循环顺序

// 3rdPartyData is also an associative array 
for(var key in 3rdPartyData) { 
    cookie[key] = 3rdPartyData[key]; 
} 

我的对象被存储到在端cookie和被前一个cookie加载形式(或创建的{}如果没有cookie存在)。

每个页面查看来自第三方的数据在我的cookie数组中被添加或更新。

问题:如果我穿着查看cookie,循环是否总是按照他们所添加的顺序获取每个关键点,或者订单是否会更改?

如果有谁能提供一个关于如何管理这样的事情的想法?

+1

对象中按键的顺序很简单,但您可以创建一个对象数组。 – elclanrs

+2

@elclanrs“微不足道”?这是正确的词吗? –

+2

JavaScript没有关联数组。你可能在谈论对象键,他们的顺序不能保证。 –

回答

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; 
}; 
+0

请注意,每个浏览器都不支持'Object.keys(3rdPartyData)'。 IE <9没有这个。 – Olegas

+2

是的,但它可以很容易地添加... – mishik

+0

@ Olegas:你的意思是“不支持在*每*浏览器”我猜。 Firefox和Chrome支持它。 –