2011-07-30 22 views
0

這不像一個請求評論的問題。可靠的兩個JavaScript對象並改變它們的關鍵名稱

我有兩個對象,我想合併它們,取第二個值,併合並(覆蓋)第一個,同時保留第一個的屬性名稱。

第二個對象中的鍵名對於人類消費而言很長並且是描述性的,而第一個對象的鍵名稱在保存字節時是簡潔和難看的。

我在使用jQuery之前,第二個對象的可讀性成爲一個問題,所以現在我已經把我自己的方式扔在一起了。但是,由於遍歷對象不會按原始順序返回它們的鍵/值對,我想知道這是否是一個長期可行的解決方案。希望代碼能更好地解釋這一點。

想法,請提前致謝! :)

var ob = {}, i = 0, k, pArr = []; 

for(k in p){ 

    if(p.hasOwnProperty(k)){ 
     pArr.push(k); 
    } 

} 

for(k in c){ 

    if(c.hasOwnProperty(k)){ 
     ob[pArr[i]] = c[k]; 
    } 

    i++; 

} 

ob對象現在具有第二個對象的所有屬性,但是具有第一個對象的所有屬性。這確實有用,但感覺很難看,而且我想知道是否有更好的方法。

回答

0

您已經發現循環不會以任何特定順序返回對象。行ob[pArr[i]] = cArr[k];因此不安全。

  1. 您將需要鍵名映射(可以說是p_key => c_key)。

  2. 遍歷映射。

實施例:

for (p_key in map) 
    c_key = map[p_key]; 
    ob[p_key] = c[c_key]; 

例2 - 保持真正p屬性:

for (p_key in p) ob[p_key] = p[p_key]; 
for (... same as above) 
+0

,讓我覆蓋有第二對象,每值值的對象,但不請允許我保留第一個對象的屬性名稱。但我正在調整它。 – Tom

+0

那麼,簡單地將'ob [p_key] = c [c_key]'改爲'p [p_key] = c [c_key]',然後用第二個對象的所有值更新第一個對象。但是如果你想要所有未映射的p鍵,你需要事先用'p'的所有值初始化ob'。 –

+0

使用我的方法,重複這個過程100000次,所有的屬性在出路中的變化與在途中一樣......這只是偶然嗎? – Tom

相關問題