Json 一维数组变为二维数组

有一个json文件,内容类似为:


{
    "c4": [{
        "label": "abc1",
        "element": efg1,
        "root": 1,
        "R": -1,
    }, {
        "label": "abc2-0",
        "element":efg12,
        "root": 2,
        "R": 0
    }, {
        "label": "abc2-1",
        "element":drwe
        "root": 2,
        "R": 1
    }, {
        "label": "abc2-2-0",
        "element": ssd11,
        "root": 2,
        "R": 2
    }, {
        "label": "abc2-2-1",
        "element": 77444ww,
        "root": 3,
        "R": 0
    }, {
        "label": "abc2-2-2",
        "element": wdwd1515,
        "root": 3,
        "R": 1
    }]
}

root:第几个数据,R:是否循环,R=-1不循环,R=0 1 2 3 4等为循环的第几项
如何将其拆分为:


[
 [{
        "label": "abc1",
        "element": efg1,
        "root": 1,
        "R": -1,
    }],
[{
        "label": "abc2-0",
        "element":efg12,
        "root": 2,
        "R": 0
    }, {
        "label": "abc2-1",
        "element":drwe
        "root": 2,
        "R": 1
    }, {
        "label": "abc2-2-0",
        "element": ssd11,
        "root": 2,
        "R": 2
    }],
 [{
        "label": "abc2-2-1",
        "element": 77444ww,
        "root": 3,
        "R": 0
    }, {
        "label": "abc2-2-2",
        "element": wdwd1515,
        "root": 3,
        "R": 1 
    }]
]

目前为止我都是边学边做,所以基础不够扎实,我感觉好像是一维数组转化为二维数组?但是网上查资料,尝试了很久都实现不了。
希望有通用性方法,就是不依赖上面json内容的(root和R的规律不会改变了),因为以上json文件只是示例 。
提供能让我实现效果思路也行。


var list = data.c4;
            var res = {};
            for(var i = 0; i < list.length; i++){
                var item = list[i];
                if(item.root in res){
                    res[item.root].push(item)
                }
                else{
                    res[item.root] = [item]
                }
            }
            for(var root in res){
                res[root].sort(function (x, y) {
                    return x.R == y.R?0: (x.R > y.R? 1: -1)
                });
            }
            console.log(res)

这个是json数组呀,直接通过下标访问就可以了。

其实,就是父子关系的层级问题;
1、找一级
2、通过一级找二级
3、通过二级找三级

类推。。

这样即可生成

<script>
  var josn={
"c4": [{
    "label": "abc1",
    "element": 'efg1',
    "root": 1,
    "R": -1,
}, {
    "label": "abc2-0",
    "element":'efg12',
    "root": 2,
    "R": 0
}, {
    "label": "abc2-1",
    "element":'drwe',
    "root": 2,
    "R": 1
}, {
    "label": "abc2-2-0",
    "element": 'ssd11',
    "root": 2,
    "R": 2
}, {
    "label": "abc2-2-1",
    "element": '77444ad',
    "root": 3,
    "R": 0
}, {
    "label": "abc2-2-2",
    "element": 'wdwd1515',
    "root": 3,
    "R": 1
}]
}
var no_forarr=[];
var forarr=[];
var newjson=[]
for(var i =0;i<josn.c4.length;i++){
    if(josn.c4[i].R==-1){
      no_forarr.push(josn.c4[i])
    }else{
      forarr.push(josn.c4[i])
    }
}
newjson.push(no_forarr)
newjson.push(forarr)
console.log(JSON.stringify(newjson))
</script>

结果如下:

img

[[{"label":"abc1","element":"efg1","root":1,"R":-1}],[{"label":"abc2-0","element":"efg12","root":2,"R":0},{"label":"abc2-1","element":"drwe","root":2,"R":1},{"label":"abc2-2-0","element":"ssd11","root":2,"R":2},{"label":"abc2-2-1","element":"77444ad","root":3,"R":0},{"label":"abc2-2-2","element":"wdwd1515","root":3,"R":1}]]


<html>
</html>
<script>
   var jsonstr = '{\n' +
        '    "c4": [{\n' +
        '        "label": "abc1",\n' +
        '        "element": "efg1",\n' +
        '        "root": 1,\n' +
        '        "R": -1\n' +
        '    }, {\n' +
        '        "label": "abc2-0",\n' +
        '        "element":"efg12",\n' +
        '        "root": 2,\n' +
        '        "R": 0\n' +
        '    }, {\n' +
        '        "label": "abc2-1",\n' +
        '        "element":"drwe",\n' +
        '        "root": 2,\n' +
        '        "R": 1\n' +
        '    }, {\n' +
        '        "label": "abc2-2-0",\n' +
        '        "element": "ssd11",\n' +
        '        "root": 2,\n' +
        '        "R": 2\n' +
        '    }, {\n' +
        '        "label": "abc2-2-1",\n' +
        '        "element": "77444ww",\n' +
        '        "root": 3,\n' +
        '        "R": 0\n' +
        '    }, {\n' +
        '        "label": "abc2-2-2",\n' +
        '        "element": "wdwd1515",\n' +
        '        "root": 3,\n' +
        '        "R": 1\n' +
        '    }]\n' +
        '}\n'
   jp=JSON.parse(jsonstr)
   //先定义一个大数组
   outPut = []
   for (k in jp.c4) {
      //将每组元素组装成数组添加到大数组中
       outPut.push([jp.c4[k]])
   }
   console.log(outPut)
   console.log(JSON.stringify(outPut))
</script>