1

階層オブジェクトが階層
プロパティに格納されているオブジェクトの配列。オブジェクトのネストは、この階層に基づいて行われます

[  
  {
    "hierarchy" : ["obj1"],  
    "prop1":"value" 
  },
  {  
    "hierarchy" : ["obj1","obj2"],  
    "prop2":"value",  
    "prop3":"value"  
  },  
  {  
    "hierarchy" : ["obj1","obj3"],  
    "prop4":"value",  
    "prop5":"value"  
  },  
  {  
    "hierarchy" : ["obj1","obj3", "obj4"],  
    "prop6":"value",  
    "prop7":"value",  
    "arr"  :["val1", "val2"]  
  }
]  

ネストされたオブジェクトが予期されます。ここで階層キーが削除されました

{  
  "obj1":{  
    "prop1":"value",  
    "obj2" : {  
      "prop2":"value",  
      "prop3":"value"  
    },  
    "obj3":{  
      "prop4":"value",  
      "prop5":"value",  
      "obj4" : {  
        "prop6":"value",  
        "prop7":"value",  
        "arr"  :["val1", "val2"]  
      }  
    }  
  }  
}  

試したコードですが、8行目で階層を取得できません

var input = "nested array as above";  
var output = {};  
var globalTemp = output;  
for(var i = 0 ; i<input.length ; i++){  
  var tempObj = input[i];  
  for(var key in tempObj){  
    if(key == "hierarchy"){     
      globalTemp = globlalTemp[tempObj[key]] = {};  
    }  
  }  
}  
console.log(globalTemp);
4

2 に答える 2

2

メソッドと内部を使用forEachしてreduce、現在のオブジェクトの浅いコピーを作成し、hierarchyプロパティを削除できます。

const data = [{"hierarchy":["obj1"],"prop1":"value"},{"hierarchy":["obj1","obj2"],"prop2":"value","prop3":"value"},{"hierarchy":["obj1","obj3"],"prop4":"value","prop5":"value"},{"hierarchy":["obj1","obj3","obj4"],"prop6":"value","prop7":"value","arr":["val1","val2"]}]

const result = {}
data.forEach(function(o) {
  o.hierarchy.reduce(function(r, e) {
    const clone = Object.assign({}, o);
    delete clone.hierarchy
    return r[e] = (r[e] || clone)
  }, result)
})

console.log(result)

于 2018-03-15T20:13:44.380 に答える