Break递归函数

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

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

我正在使用递归函数,因为我要查找的项目可能在树的深处处于多个级别。

我已经尝试过中断,中断标签和其他找到的解决方案。

据我所知,它有一些事情要做,我在尝试破坏时不在循环中,而是在地图中。

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);
        }
    });
}

提前感谢!

javascript recursion foreach iterator break
2个回答
0
投票

您还可以使用已经支持中断的for .. of循环:

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":"#"}];

var iteration = 0;
const find = "1235235"

function func(data, find) {
    for (const k of Object.keys(data)) {
        iteration++;

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

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

    return false;
}

func(data, find);

0
投票

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

Array#some
© www.soinside.com 2019 - 2024. All rights reserved.