javascript - 为什么这段 JavaScript 代码返回未定义?

标签 javascript

var treeDataOld = [
			{id: '1', pId: '', name: 'root1', checked: false},
			{id: '2', pId: '', name: 'root2', checked: false},
			{id: '3', pId: '', name: 'root3', checked: true},
			{id: '4', pId: '1', name: 'child', checked: true},
			{id: '5', pId: '4', name: 'child', checked: false},
			{id: '6', pId: '5', name: 'child', checked: false},
			{id: '7', pId: '6', name: 'child', checked: false},
			{id: '8', pId: '7', name: 'child', checked: true},
			{id: '9', pId: '8', name: 'child', checked: false},
		];

function findRoot(node) {
    var getParentNode = function (node, refArray) {
        var len = refArray.length;
        for (var i = 0; i < len; i++) {
            if (refArray[i].id === node) {
                return refArray[i];
            }
        }
    };

    if (node.pId !== '') {
        findRoot(getParentNode(node.pId, treeDataOld));
    } else { 
        console.log(node);   // I got OBJECT here
        return node;
    }
}

var rootNode = findRoot(treeDataOld[8]);
console.log(rootNode);   // here is UNDEFINED

我想通过给出父节点来找到根节点。返回之前,我在函数 findRoot 内的第一个控制台得到了正确的结果。但函数外部的控制台未定义。

最佳答案

findRoot() 函数在进行第一次递归调用后不会返回任何内容。您想要的是以下内容:

if (node.pId !== '') {
    return findRoot(getParentNode(node.pId, treeDataOld));
}

关于javascript - 为什么这段 JavaScript 代码返回未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33839678/

相关文章:

javascript - 在 React 中调用多个函数,一个在组件内部,另一个在组件外部?

javascript - jQuery Ajax 使用 IE 请求本地磁盘耗时太长

javascript - 加载时 Canvas 图像不显示

javascript - 在引用另一个模式的 MongoDB 模式上创建文本索引

javascript - Twitter Bootstrap 的旋转木马淡入淡出过渡

javascript - 禁用表单按钮

javascript - WordPress Ajax 请求返回 0

javascript - 使用 jquery 从具有值的 firebase 数组中删除项目

javascript - vue.js props 也会发生 setter/getter 吗?

javascript - Backbone.js 路由器模式对浏览器 "back"按钮或直接导航的不同响应