Saya memiliki array objek javascript yang berisi beberapa parameter untuk diteruskan ke kelas khusus.

    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,
    }];

Di atas adalah objek sampel yang berisi detail. Jika saya memiliki kelas seperti di bawah ini,

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

Saya ingin menulis fungsi rekursif yang efisien yang pada akhirnya mengembalikan saya array objek sampleClass.

ObjOne dan objTwo menjadi dua objek dalam array, dengan objOne memiliki dua anak dan seterusnya seperti yang diberikan dalam classObjectDetails

1
Amit Kumar 17 Agustus 2017, 15:17

2 jawaban

Jawaban Terbaik

Anda dapat membuat fungsi rekursif menggunakan loop forEach() dan menggunakan data dari setiap objek dalam array asli untuk membuat instance kelas Anda yang akan memiliki semua metode kelas tersebut.

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())
2
Nenad Vracar 17 Agustus 2017, 12:39
<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>
0
Ankush G 17 Agustus 2017, 12:49