【问题标题】:Creating nested object for a following Javascript object?为以下 Javascript 对象创建嵌套对象?
【发布时间】:2020-07-03 15:17:12
【问题描述】:

我想构建一个类似于以下结构的对象:

record 1 {id,name,desc}
   record 2 {id,name,desc}
        record 3 {id,name,desc}
            record 4 {id,name,desc}

它是一个嵌套结构,其中记录 1 是父记录,记录 2 是记录 1 的子记录,记录 3 是记录 2 的子记录,依此类推。

我在堆栈溢出中浏览了各种帖子,其中建议使用我无法正确生成的 push、put 等方法。请帮忙。

目标

{
    "8b9e235c0fe412004e938fbce1050e0f": [
        {
            "name": "Parent 1",
            "childs": [
                "caf23c95db3110100cc4bd513996195d": {
                    "name": "Child of Parent 1"
                    "childs": [
                                   "caf23c95db3110100cc4bd513996195d": {
                                    "name": "Child of Child 2"
                                    }
                              ]
                }
            ]
        }
    ]
}

不确定它是否正确的顺序方式,但想法是将以下对象变成嵌套对象:

[
  {
    "name": "Level 2",
    "childId": "caf23c95db3110100cc4bd513996195d",
    "parentId": "8b9e235c0fe412004e938fbce1050e0f",
    "description": null,
    "level": 1
  },
  {
    "name": "Level 3",
    "childId": "c303f495db3110100cc4bd51399619b8",
    "parentId": "caf23c95db3110100cc4bd513996195d",
    "description": null,
    "level": 2
  },
  {
    "name": "Level 4",
    "childId": "be133895db3110100cc4bd51399619ba",
    "parentId": "c303f495db3110100cc4bd51399619b8",
    "description": null,
    "level": 3
  },
  {
    "name": "Intrusion and Incident Response Standard Operating Procedure",
    "id": "8b9e235c0fe412004e938fbce1050e0f",
    "description": "blablalblablabab",
    "level": 0
  }
]

使用此代码..

function hasChild(parent,level){
var grProcessChild = new GlideRecord('sn_compliance_policy');
grProcessChild.addQuery('parent', parent);
grProcessChild.query();
while(grProcessChild.next()){
    var level = parseInt(level) + 1;
  var child =  {}; // object
  child.name = grProcessChild.getValue('name');
  child.childId = grProcessChild.getUniqueValue();
  child.parentId = grProcessChild.getValue('parent');
  child.description = grProcessChild.getValue('description');
  child.level = level;
  arrData.push(child);
  hasChild(grProcessChild.getUniqueValue(),level);
    }
}
var arrData = []; // array
var grProcess = new GlideRecord('sn_compliance_policy');
grProcess.addQuery('sys_id','8b9e235c0fe412004e938fbce1050e0f');
grProcess.query();
while(grProcess.next()){
  var root = {}; // object
  root.name = grProcess.getValue('name');
  root.id = grProcess.getUniqueValue();
  root.description = grProcess.getValue('description');
  root.level = 0; 
  hasChild(grProcess.getUniqueValue(),root.level);
  arrData.push(root);
}

【问题讨论】:

标签: javascript arrays json object nested-loops


【解决方案1】:

如果你在 _.reduceRight 方法中使用 lodash Lodash 会很有帮助。 这是一个 JSFiddle 证明它正在工作。

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多