【问题标题】:Recursion over an array of object to create custom class object递归对象数组以创建自定义类对象
【发布时间】:2018-01-25 20:33:54
【问题描述】:

我有一个 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 有两个子对象,依此类推,如 classObjectDetails 中给出的

【问题讨论】:

  • 尝试,失败,在这里发布。至少在调用自身的函数中创建一个循环。
  • 你能发布预期的输出吗?
  • 我试过用 forEach 来做,但如果孩子的嵌套进一步增加,如果不更改代码,这将无法工作。我也尝试遍历外部数组,然后解析每个数组,但在第三级之后我无法解析。

标签: javascript arrays recursion javascript-objects


【解决方案1】:

您可以使用forEach() 循环创建递归函数,并使用原始数组中每个对象的数据来创建您的类的实例,该实例将包含该类的所有方法。

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】:
<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>

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 2015-05-15
    • 2014-06-20
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多