javascript - 中断递归函数

标签 javascript recursion foreach iterator break

<分区>

在此函数中,我试图在 JSON 字符串中查找特定项目。我可以找到该项目,但问题是一旦找到该项目我想打破 forloop。

我正在使用递归函数,因为我正在寻找的项目可能在树的深处。

我已经尝试过 break、break with label 和我找到的其他几种解决方案。

据我了解,当我试图打破时我不在循环中而是在 map 中,它有一些事情要做。

data = '[{"id":"123","name":"Level 1 1","href":"#","list":[{"id":"1235235","name":"Level 2 1","href":"#","list":[{"id":"63463634","name":"Level 2 1","href":"#"}]}]},{"id":"79699676","name":"Level 2 1","href":"#"},{"id":"959656454","name":"Level 3 1","href":"#"},{"id":"46346346346123","name":"Level 4 1","href":"#"}]';

var iteration = 0;
const find = "1235235"

function func(data, find) {
    Object.keys(data).forEach((k) => {
        iteration++;

        if(data[k]['id'] === find) {
            console.log("found " + data[k]['id']);
            this.call();
            break iteration; 
        }

        if(data[k]['list'] !== undefined) {
            this.func(data[k]['list'], find);
        }
    });
}

提前致谢!

最佳答案

你可以使用 Array#some并返回找到。

function func(data, find) {
    return Object.keys(data).some((k) => {      // return result of iteration
        iteration++;

        if (data[k].id === find) {
            console.log("found " + data[k]['id']);
            //this.call();
            return true;                        // return on direct found
        }

        if (Array.isArray(data[k].list)) {
            return func(data[k].list, find);    // return result of nested search
        }
    });
}

var data = [{ id: "123", name: "Level 1 1", href: "#", list: [{ id: "1235235", name: "Level 2 1", href: "#", list: [{ id: "63463634", name: "Level 2 1", href: "#" }] }] }, { id: "79699676", name: "Level 2 1", href: "#" }, { id: "959656454", name: "Level 3 1", href: "#" }, { id: "46346346346123", name: "Level 4 1", href: "#" }],
    iteration = 0,
    find = "1235235";

func(data, find);
console.log(iteration);

关于javascript - 中断递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929862/

相关文章:

javascript - 使用 jQuery 在页面重新加载后隐藏 iframe id

javascript - 电子邮件正则表达式不验证句号之后的部分

javascript - 用于从递归指令生成的菜单结构的 AngularJS 多级下拉菜单

javascript - 不允许在对象中设置新的或未声明的属性

PHP 产品数据库中的三列表

PHP:找到嵌套 foreach 循环中的最后一项?

c# - Foreach 所有表单上的每个控件

c++ - 对每个递归结构的元素执行一些操作,而无需在 C++ 中向其添加方法

java - Mockito - 验证递归方法

c - 递归函数比较没有库函数的字符串