Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建现有json的树_Javascript_Jquery_Json_Recursion_Tree - Fatal编程技术网

Javascript 如何创建现有json的树

Javascript 如何创建现有json的树,javascript,jquery,json,recursion,tree,Javascript,Jquery,Json,Recursion,Tree,我想解析从api获取的json 我有以下模式 nodes = [ { id: 1, name: 'root1', key: 'value1' key1: 'value2' children: [ { id: 2, name: 'child1' }, { id: 3, name: 'child2' } ] }, {

我想解析从api获取的json

我有以下模式

nodes = [
    {
        id: 1,
        name: 'root1',
        key: 'value1'
        key1: 'value2'
        children: [
            { id: 2, name: 'child1' },
            { id: 3, name: 'child2' }
        ]
    },
    {
        id: 4,
        name: 'root2',
        key3: 'value3'
        key4: 'value4'
        children: [
            { id: 5, name: 'child2.1' },
            {
                id: 6,
                name: 'child2.2',
                key5: 'value5'
                key6: 'value6'
                children: [{
                    id: 7,
                    name: 'subsub',
                    children: [{
                        id: 8,
                        name: 'subsubsub'
                    }]
                }]
            }
        ]
    }
];
我试着跟着,但没用

data = []

var nodesFun = function(n, data, cObj) {
    let obj = {}
    obj["name"] = n['name']
    if (n['children']) {
        console.log(obj);
        console.log("name--> "+n['name']);
        let childList = []
        for (let i=0; i < n['children'].length; i++){
            console.log("cname--> "+n['children'][i]['name']);
            childList.push({"name": n['children'][i]['name']})
            let dataObj = nodesFun(n['children'][i], data, obj)
            if (dataObj){
                data.push(dataObj)
            }
        }
        obj["children"] =  childList
        cObj["children"] =  obj
        return cObj
    }else{
      cObj["children"] =  obj
      return cObj
    }
}
nodesFun(nodes, data, {})
console.log(nodes);

您可以使用
array#forEach
和递归方法修改原始
节点
数组。如果该键包含
key
word,则迭代节点的每个键,并将其删除,如果该键包含
子项,则再次调用
deleteKey
函数

var节点=[{id:1,name:'root1',key:'value1',key1:'value2',子节点:[{id:2,name:'child1'},{id:3,name:'child2'}},{id:4,name:'root2',key3:'value3',key4:'value4',子节点:[{id:5,name:'child2.2'},{key5:'value5',key6:'value6',子节点:[{id:7,name:'subsubsubsubsubsub子节点:[{id:8,名称:'subsubsubsub'}]}]}];
var deleteKey=(节点)=>{
nodes.forEach(node=>{
Object.keys(节点).forEach(k=>{
如果(k.includes('key'))
删除节点[k];
如果(k=='children')
deleteKey(节点[k]);
})
});
}
删除密钥(节点);
console.log(节点);

.as console wrapper{max height:100%!important;top:0;}
函数从对象中删除所有非id、名称和子项的键

let节点=[
{
id:1,
名称:'root1',
键:'value1',
键1:‘值2’,
儿童:[
{id:2,名称:'child1'},
{id:3,名称:'child2'}
]
},
{
id:4,
名称:'root2',
键3:‘值3’,
键4:‘值4’,
儿童:[
{id:5,名称:'child2.1'},
{
id:6,
姓名:'child2.2',
键5:‘值5’,
键6:‘值6’,
儿童:[{
id:7,
名称:'subsub',
儿童:[{
id:8,
名称:“subsubsub”
}]
}]
}
]
}
];
常量getFinalNode=函数(arr){
arr.forEach(功能(obj、idx){
设tmpObj={
id:obj.id,
名称:obj.name,
}
if(obj.children&&obj.children.length){
tmpObj.children=getFinalNode(obj.children)
}
arr[idx]=tmpObj
})
返回arr
}
getFinalNode(节点);

console.log(nodes)
所以你只想去掉
值?(这与angular无关)是的,但在我的原始json中有许多不同名称的键值。这就是为什么我试图在现有的键值上构建新的json。我添加了另一个解决方案,它不会修改原始对象。
nodes = [{
        id: 1,
        name: 'root1',
        children: [
            { id: 2, name: 'child1' },
            { id: 3, name: 'child2' }
        ]
    },
    {
        id: 4,
        name: 'root2',
        children: [
            { id: 5, name: 'child2.1' },
            {
                id: 6,
                name: 'child2.2',
                children: [{
                    id: 7,
                    name: 'subsub',
                    children: [{
                        id: 8,
                        name: 'subsubsub'
                    }]
                }]
            }
        ]
    }
];