2015-09-26 54 views
0

我有一個對象,看起來像這樣:是否可以通過物品更改物品中父母/孩子的順序?

sum = { 
    value:{ 
     a: 10, 
     b: 11 
    } 
    value2:{ 
     a: 33, 
     c: 12 
    } 
    .. 
} 

我的目標是比較複雜的,字母確實包含具有不同值的對象,但關鍵的是,我通過存在於所有的信件要循環每一個值,並返回相同的對象:

a:{ 
    value: 10, 
    value2: 33 
} 

我可以遍歷整個事情建立一個新的對象,但有沒有的「翻轉的對象訂購

我只是想用一種更EFFIENT方式?鑰匙存在於所有的價值對象中,我目前這樣得到它們,但這不是必需的。

value = ['value', 'value2'] 
tags.forEach((tag) => 
    keys.push(Object.keys(sum[tag])) 
) 
matches = _.intersection.apply(_, keys); 


matches.forEach((match) => { 
    ... 
} 
+0

將映射在這裏也許申請? – Himmators

+1

對象鍵沒有順序。如果你想要一個特定的訂單,你應該對數組中的鍵進行排序。 – elclanrs

+0

這不是關於對象中項目的順序,而是關於哪個節點是父節點和哪個節點是子節點的順序。 – Himmators

回答

3

此解決方案重新組織屬性的順序。

grouped[kk][k] = sum[k][kk] for all elements 

var sum = { 
 
     value: { 
 
      a: 10, 
 
      b: 11 
 
     }, 
 
     value2: { 
 
      a: 33, 
 
      c: 12 
 
     } 
 
    }, 
 
    grouped = {}; 
 

 
Object.keys(sum).forEach(function (k) { 
 
    Object.keys(sum[k]).forEach(function (kk) { 
 
     grouped[kk] = grouped[kk] || {}; 
 
     grouped[kk][k] = sum[k][kk]; 
 
    }); 
 
}); 
 
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');