2015-09-26 37 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>');

相关问题