递归搜索和更新 JSON 对象

aus*_*809 2 recursion json

JSON 问题给你们。

假设我有一个像这样的 JSON 对象,每个节点都是一个带有 ID 和其他节点数组的对象:

var tree = {
    id: 0,
    items: [{
            id: 48,
            items: [{id: 67, items :[]}]
        }, {
            id: 126,
            items: []
        }]
}
Run Code Online (Sandbox Code Playgroud)

假设我想在适当的节点用新的项目数组更新对象。因此,例如,使用上述树对象会发生以下情况:

function updateTree(id, array) {
    //code goes here
}
var data = [{id: 121, items :[]}]

tree = UpdateTree(67, data)
Run Code Online (Sandbox Code Playgroud)

和 tree 会相等:

tree = {
    id: 0,
    items: [{
            id: 48,
            items: [{id: 67, items : [{id: 121, items :[]}]}]
        }, {
            id: 126,
            items: []
        }]
}
Run Code Online (Sandbox Code Playgroud)

我将如何在这里实现 updateTree ?递归正在撕裂我的大脑。谢谢!这是一个小提琴:https : //jsfiddle.net/nus2jyvg/

drG*_*ove 6

var tree = {
    id: 0,
    items: [{
            id: 48,
            items: [{id: 67, items :[]}]
        }, {
            id: 126,
            items: []
        }]
    }

function updateTree(id, update, tree) {
    if (tree.id === id) {
        tree.items = update
    } else {
        tree.items = tree.items.map(function(item) {
            return updateTree(id, update, item)
        })
    }
    return tree
}
var data = [{id: 121, items :[]}]

tree = updateTree(67, data, tree)
Run Code Online (Sandbox Code Playgroud)