使用下划线从嵌套对象(父-子)中获取路径字段值

fetch path field value from nested objects(Parent- child) using underscore.js

本文关键字:获取 路径 字段 下划线 嵌套 对象      更新时间:2023-09-26
var levels= [
 {
  path: 'RS',
  hasChild :true
 },
    {
     path: 'MO',
     hasChild: true
    },
       {
        path: 'EL',
        hasChild: true   
       },
          {
            path: 'CL',
            hasChild: false
          },
       {
        path: 'EL1',
        hasChild: true   
       },
          {
            path: 'CL1',
            hasChild: false
          },
{
  path: 'RS2',
  hasChild :true
 },
    {
    path: 'MO2',
    hasChild: true
    },
      {
       path: 'EL2',
       hasChild: true   
       },
          {
            path: 'CL2',
            hasChild: false
          },
          {
            path: 'CL3',
            hasChild: false
          },
];

是否可以使用下划线从对象'level'创建完整的路径?例如-
RS'MO'EL'CL
RS '莫' EL1 ' CL1
平日CL2 ' MO2 ' EL2 '
平日' MO2 ' CL3 ' CL3
在上述任何一个级别中,子节点都可以出现多个。请告知下划线是否可以对嵌套的对象数组进行深度监视。

请为上面嵌套数组对象的错误格式向我道歉。

function parse (levels)  {
  var buffer = [], target = [];
  levels.forEach(function (level) {
    buffer.push(level.path);
    if (!level.hasChild) {
      target.push(buffer.join('/'));
      buffer.splice(0, buffer.length + 1);
    }
  });
  return levels;  
}

给了: (RS/MO/EL/CL,‘EL1/CL1’,‘CL2卢比/MO2/EL2/’,‘CL3]

给定您当前的结构,获得所需输出的逻辑是不清楚的。程序如何知道RS2启动了一个新节点,而EL1没有?

编辑:

这解决了问题,但老实说,它很粗糙。一个更好的方法是以更好的方式组织数据。

function parse (levels)  {
  var buffer = [], target = [];
  levels.forEach(function (level) {
    if (level.hasChild) {
      buffer.push(level.path);
    }
    else {
      var tmp = buffer.slice();
      tmp.push(level.path);
      target.push(tmp.join('/'));
      buffer.splice(buffer.length - 1, 1);
    }
    if (/^RS/.test(level.path)) {
      buffer.splice(1, buffer.length);
    }
  });
  return target;
}

结果: (RS/MO/EL/CL,‘RS/MO/EL1/CL1’,‘CL2 RS/MO2/EL2/’,‘RS/MO2/CL3]

use _。每个

<我>

var path =""
_.each(levels,function(object){
 path = path +object.path+"/"
})
console.log(path)

输出:"RS/MO/EL/CL/EL1/CL1 CL2卢比/MO2/EL2///CL3/"

编辑:

我认为你的Json应该是这样的:

<我>

var levels = [
        {
        "path": "RS",
        "hasChild": true,
        "childerens": {
            "path": "MO",
            "hasChild": true,
            "childe1": [
                {
                    "path": "EL",
                    "hasChild": true
                },
                {
                    "path": "CL",
                    "hasChild": false
                }
            ],
            "childe2": [
                {
                    "path": "EL1",
                    "hasChild": true
                },
                {
                    "path": "CL1",
                    "hasChild": false
                }
            ]
        },
        "isParent": true
    },
    {
        "path": "RS2",
        "hasChild": true,
        "childerens": {
            "path": "MO2",
            "hasChild": true,
            "chiled1": [
                {
                    "path": "EL2",
                    "hasChild": true
                },
                {
                    "path": "CL2",
                    "hasChild": false
                }
            ],
            "chiled2": [
                {
                    "path": "CL3",
                    "hasChild": true
                },
                {
                    "path": "CL3",
                    "hasChild": false
                }
            ]
        },
        "isParent": true
    }
]

验证json是正确还是错误,请转到JSONLINT

为验证删除变量名