将jsonobject插入新数组

时间:2014-11-11 08:40:44

标签: javascript json

假设您有以下jsonObject

      var arrayWithValuesAndGroups = [{
            "TestObject": "Object1",
            "GraphGroup": {
                "Test": {
                    "Group": "A",
                    "Value": "6"
                },
                "Test2": {
                    "Group": "B",
                    "Value": "5"
                }
            }
        },

        {
            "TestObject": "Object2",
            "GraphGroup": {
                "Test": {
                    "Group": "A",
                    "Value": "9"
                },
                "Test2": {
                    "Group": "B",
                    "Value": "12"
                }
            }
        },

        {
            "TestObject": "Object3",
            "GraphGroup": {
                "Test": {
                    "Group": "A",
                    "Value": "99"
                },
                "Test2": {
                    "Group": "B",
                    "Value": "16"
                }
            }
        }
    ]

我想创建一个包含所有组的新对象,并且具有该组的所有值都应该在该数组中。例如,我希望将上述对象转换为下面的对象

     {
        "A": {
            "Test1": {
                "0": "6",
                "1": "9",
                "2": "99"
            }
        },
        "B": {
            "Test2": {
                "0": "5",
                "1": "12",
                "2": "16"
            }
        }
    }

你会用什么策略?

3 个答案:

答案 0 :(得分:1)

您需要将一个数据结构转换为另一个数据结构。

这通常通过创建新对象并在一系列转换(在这种情况下是迭代,数组创建,值赋值)中从原始对象设置其值来完成。

虽然可以使用vanilla js轻松完成,但您也可以使用lodash库,它通过提供迭代,访问键,值等方法来极大地促进这种转换。

我不会为您的特定数据对象提供一个确切的解决方案,因为1)您已经询问过策略2)所以不能让别人去做您的工作3)答案应该对其他人有用有其他数据结构的人。

答案 1 :(得分:0)

试试这个。

对象和数组的概念在js和另一个代码上非常重要。

实践才是唯一的方法。

var newObject = {};

 for(var i=0,iLen=arrayWithValuesAndGroups.length;i<iLen;i++){
     var TestGroupObject = arrayWithValuesAndGroups[i];
     console.log(TestGroupObject);

     // {
     //    "TestObject": "Object1",
     //    "GraphGroup": {
     //        "Test": {
     //            "Group": "A",
     //            "Value": "6"
     //        },
     //        "Test2": {
     //            "Group": "B",
     //            "Value": "5"
     //        }
     //     }
     // }

     var GraphGroupObject = TestGroupObject.GraphGroup;
     console.log(GraphGroupObject);
     // {
     //        "Test": {
     //            "Group": "A",
     //            "Value": "6"
     //        },
     //        "Test2": {
     //            "Group": "B",
     //            "Value": "5"
     //        }
     //     }

     var GraphGroupObjectKeys=Object.keys(GraphGroupObject);
     for(var j=0,jLen=GraphGroupObjectKeys.length;j<jLen;j++){
         var GraphGroupObjectKey = GraphGroupObjectKeys[j];
         console.log(GraphGroupObjectKey)
         // keys are Test, Test2

         // GraphGroupObject[GraphGroupObjectKey]
         // {
         //     "Group": "A",
         //     "Value": "6"
         // }

         var Group = GraphGroupObject[GraphGroupObjectKey].Group;
         var Value = GraphGroupObject[GraphGroupObjectKey].Value;

         if(!newObject[Group]){
             newObject[Group]={};
         }
         if(!newObject[Group][GraphGroupObjectKey]){
             newObject[Group][GraphGroupObjectKey]={};
         }
         newObject[Group][GraphGroupObjectKey][i] = Value;
     }
 }

答案 2 :(得分:0)

可能是以下代码可以帮助你解决这个问题,摆弄http://jsfiddle.net/jesamzjv/

    function GetMyFormat(arrayWithValuesAndGroups){

        var finalOb = {};

        pushToOb = function(group, value, test){
            if(!finalOb[group]){
              finalOb[group] = {};
              finalOb[group][test] = {};
            }  
              var myOb = finalOb[group][test];
              var count = Object.keys(myOb).length;
                myOb[count] = value;
        }

        addToAnAr = function(ob){
            for (var i in ob){
              pushToOb(ob[i].Group,ob[i].Value,i)
            }
        }

        for(var i in arrayWithValuesAndGroups){
          item = arrayWithValuesAndGroups[i];
          addToAnAr( item["GraphGroup"] );
        }
        return finalOb;
    }
    console.log(GetMyFormat(arrayWithValuesAndGroups))