【发布时间】:2017-11-03 13:28:31
【问题描述】:
我正在尝试创建一个函数,以便您可以遍历一个包含大量对象的大对象,并按值查找特定方法。当使用 break 语句找到值时,我想停止函数中的循环。这是我的代码。
let fake_window = {
aaa: "aaa",
bbb: "bbb",
ccc: "ccc",
ddd: function ddd() {
console.log('ddd');
},
eee: {
eea: "eea",
eeb: "eeb",
eec: "eec"
},
fff: {
ffa: "ffa",
ffb: "ffb",
ffc: {
fac: "fac",
fbc: "fbc",
fcc: "fcc",
fdc: "fdc"
}
},
ggg: {
gga: {
gaa: "gaa",
gba: "gba"
},
ggb: "ggb"
}
};
const window_loop = function (window_obj, value) {
for (const prop in window_obj) {
if (window_obj.hasOwnProperty(prop)) {
if (value) {
if (value === window_obj[prop]) { // when value is found
console.log("FOUND, NOW STOP!");
break;
}
}
console.log(prop + ' => ' + window_obj[prop]);
if (typeof window_obj[prop] === "object") {
window_loop(window_obj[prop], value);
}
}
}
};
window_loop(fake_window, 'fbc');
找到值后,我会控制台“找到,现在停止!”然后我打破循环。但由于某种原因,循环不断迭代。有人可以帮我解释为什么会这样吗?
【问题讨论】:
-
window_loop(fake_window, 'fbc')调用window_loop(fake_window['fff'], 'fbc')调用window_loop(fake_window['fff']['ffc'], 'fbc')。只有最后一个会损坏。 -
我添加了代码来展示如何通过最小的更改仍然可以使用原来的方法。
-
@gurvinder372 非常感谢!
标签: javascript for-loop callback