在此函数中,我试图在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);
}
});
}
提前感谢!
您还可以使用已经支持中断的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);
您可以使用Array#some
并返回找到。
Array#some