使用underscore.js

时间:2015-06-02 04:22:51

标签: javascript arrays underscore.js

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

是否可以使用underscore.js从对象'level'创建完整路径? 对于例如 -
RS \ MO \ EL \ CL
           RS \ MO \ EL1 \ CL1
           RS2 \ MO2 \ EL2 \ CL2
           RS2 \ MO2 \ CL3 \ CL3
在任何上述级别中,孩子可以出现多个。请告知underscore.js是否可以深入观察嵌套的对象数组。

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

2 个答案:

答案 0 :(得分:1)

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',' RS2 / MO2 / EL2 / CL2', ' CL3' ]

鉴于您当前的结构,获得所需输出的逻辑尚不清楚。 该程序应该如何知道RS2启动新节点,但EL1没有?

编辑:

这解决了问题,老实说,它的hacky。更好的方法是以更好的方式构建数据。

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',' RS / MO2 / EL2 / CL2& #39;,' RS / MO2 / CL3']

答案 1 :(得分:0)

使用_.each

var path =""

_.each(levels,function(object){

 path = path +object.path+"/"
})
console.log(path)

  

输出:<强> “RS / MO / EL / CL / EL1 / CL1 / RS2 / MO2 / EL2 / CL2 / 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

  

删除验证的变量名称