为什么两个函数给出具有相同方法的不同输出?

问题描述 投票:0回答:2

以下功能给出错误的输出

function searchFn(obj, searchText) {
    let result;
    if (obj.name === searchText) return obj;
    if (obj['children'] && obj['children'].length > 0) {
        obj['children'].forEach((i) => {
                 result = searchFn(i, searchText);
                 return result
        })
    }
    return result || null
}

以下功能给出正确的输出

function searchFn(object, searchText) {
    var result;
    if (object.name === searchText) return object;
    (object.children || []).some((o) =>{
        result = searchFn(o, searchText)
        return result
    });
    return result || null;
}

为什么会这样?我第一次使用forEach,第二次使用some函数。

有人解释为什么会这样吗?

let tree = { name: "A", children: [{ name: 'A-1', children: [{ name: "A-1-A" }, { name: "A-1-B" }] }, { name: 'B-1', children: [{ name: "B-1-A", children: [{ name: "B-11-A" }, { name: "B-11-B" }] }, { name: "B-1-B" }] }] };


console.log(searchFn(tree, 'A-1'));

预期的输出是

{名称:'A-1',子级:[{名称:“ A-1-A”},{名称:“ A-1-B”}]}] >>

是我得到的第一个功能null

第二个功能给出正确的输出,为什么?

都使用递归函数。

下面的函数给出了错误的输出函数searchFn(obj,searchText){让结果;如果(obj.name === searchText)返回obj;如果(obj ['children'] && obj ['children']。length> ...

javascript
2个回答
1
投票

forEach执行而不会中断循环。当您分配result时,它总是接收该项目的最后一个值。


1
投票

forEach的返回值将被忽略。在您的第一个代码中,您递归遍历整个结构,但是在result内部返回的forEach变量没有任何作用-最后,在循环之外,return result || null仅返回结果调用searchFn作为obj.children中的最终项目。

© www.soinside.com 2019 - 2024. All rights reserved.