2017-08-17 14 views
1

私は、カスタムクラスに渡すいくつかのパラメータを含むオブジェクトのjavascript配列を持っています。カスタムクラスオブジェクトを作成するオブジェクトの配列の再帰

var classObjectDetails = [{ 
     name: "objOne", 
     options: ["1","2"], 
     children: [{ 
     name: "childOne_objOne", 
     options: null 
     children: [{ 
      name: "childOne_childOne_objOne", 
      options: ["a", "b", "c", "d"], 
     }] 
     }, { 
     name: "childTwo_objOne", 
     options: null, 
     }] 
    }, { 
     name: "objTwo", 
     options: null, 
    }]; 

上記は詳細を含むサンプルオブジェクトです。私は

class sampleClass { 
    constructor(objName, option) { 
     this.name = objName; 
     this.options = option; 
     this.children = []; 
     // Some other properties 
    } 
    // Some other functions 
} 

、以下のようなクラスを持っている場合、私は最後に私のsampleClassオブジェクトの配列を返す効率的な再帰関数を書きたいです。

objOneとobjTwoはobjOneのインスタンスを作成する元の配列内の各オブジェクトからforEach()ループと使用データを使用して、再帰関数を作成することができるようにclassObjectDetails

+2

あなたはこれまで何を試してみましたか? – marvel308

+1

試してみてください。ここに投稿してください。少なくとも、自分自身を呼び出す関数にループを作ります。 – user5014677

+1

期待どおりの出力を投稿できますか? –

答えて

2

に示すように、2人の子供を持つとして、アレイ内の2つの目的でありますそのクラスのすべてのメソッドを持つあなたのクラスの。

var data = [{"name":"objOne","options":["1","2"],"children":[{"name":"childOne_objOne","options":null,"children":[{"name":"childOne_childOne_objOne","options":["a","b","c","d"]}]},{"name":"childTwo_objOne","options":null}]},{"name":"objTwo","options":null}] 
 

 
class sampleClass { 
 
    constructor(objName, option) { 
 
    this.name = objName; 
 
    this.options = option; 
 
    this.children = []; 
 
    } 
 
    
 
    getName() { 
 
    return this.name; 
 
    } 
 
} 
 

 
function create(data) { 
 
    var result = []; 
 
    data.forEach(function(e) { 
 
    var o = new sampleClass; 
 
    o.name = e.name; 
 
    o.options = e.options 
 
    if (e.children) { 
 
     var children = create(e.children) 
 
     if (children.length) o.children = children; 
 
    } 
 
    result.push(o) 
 
    }) 
 
    return result; 
 
} 
 

 
var result = create(data); 
 
console.log(result) 
 
console.log(result[0].children[0].getName())

+0

ありがとう、私はその子供を解析することに問題がありました。どうもありがとうございました。 –

0
<script> 
var classObjectDetails = [ 
    { 
     name: "objOne", 
     options: ["1","2"], 
     children: [ 
     { 
     name: "childOne_objOne", 
     options: null, 
     children: [ 
      { 
       name: "childOne_childOne_objOne", 
       options: ["a", "b", "c", "d"], 
      } 
     ] 
     }, 
     { 
     name: "childTwo_objOne", 
     options: null, 
     } 
     ] 
    }, 

    { 
     name: "objTwo", 
     options: null, 
    }]; 

function parseJSONTosampleClass(classObjectDetail){ 
    var sampleClasList = []; 
    for (var key in classObjectDetail) { 
     var child = classObjectDetail[key]; 
     var obj = new sampleClass(); 
     sampleClasList.push(obj); 
     obj.name = child["name"]; 
     obj.options = child["options"]; 
     obj.children = parseJSONTosampleClass(child["children"]); 
    } 

    return sampleClasList; 
} 
class sampleClass { 
constructor(objName, option) { 
     this.name = objName; 
     this.options = option; 
     this.children = []; 
    } 
} 

parseJSONTosampleClass(classObjectDetails); 

</script> 
関連する問題