2017-08-17 77 views
-3

我对JavaScript很新颖。我有一个嵌套对象,我希望能够重新排序键/值对。我试图在很多地方在线寻找解决方案,但大多数都找到了排序二维数组的答案,没有这个复杂度级别。
我的目标看起来是这样的:使用javascript创建动态键和值

id:{ 
    Category1 : { 
     a : {count:1, volume:5} 
     b : {count:2, volume:10} 
    } 
    Category2: { 
     a : {count:4, volume:8} 
     b : {count:10, volume:4} 
    } 
} 

,我想它的名字,而不是分类的基础上进行排序。 Intedend结果:

id:{ 
    a : { 
     Category1 : {count:1, volume:5} 
     Category2 : {count:4, volume:8} 
    } 
    b: { 
     Category1 : {count:2, volume:10} 
     Category2 : {count:10, volume:4} 
    } 
} 
+2

告诉我们你尝试过的东西吗? – kukkuz

+0

对象没有'order',所以,这个问题有点令人困惑...因此,如果对象没有像数组这样的内在排序 - 你想以不同的方式嵌套它?这是一个课堂问题吗? PS语法一致性很重要。 – sheriffderek

+0

@sheriffderek从示例中,他显然意味着嵌套顺序,而不是线性顺序。 – Barmar

回答

1

您可以在此代码

for(obj in id) 

使用

let id = { 
 
    Category1 : { 
 
     a : {count:1, volume:5}, 
 
     b : {count:2, volume:10} 
 
    }, 
 
    Category2: { 
 
     a : {count:4, volume:8}, 
 
     b : {count:10, volume:4} 
 
    } 
 
} 
 

 
for(obj in id){ 
 
    for(obj2 in id[obj]){ 
 
     id[obj2] = id[obj2] || {}; 
 
     id[obj2][obj] = id[obj][obj2]; 
 
    } 
 
    delete id[obj]; 
 
} 
 

 
console.log(id);

横贯ID的所有属性,做这样的obj将在集{“Category1”,“Category2”}和id [obj]将引用sub对象牛逼

for(obj2 in id[obj]) 

遍历子对象的属性,因此OBJ2将在集合{“A”,“B”}

id[obj2] = id[obj2] || {}; 

初始化ID的新属性,如果它不已经存在即ID [ “一”]和id [ “b” 的]

id[obj2][obj] = id[obj][obj2]; 

分配子子对象({计数:1,体积:5})给子属性内的新的属性的obj

delete id[obj]; 

最后删除当前的属性,因为它不再使用