Pomyślałem, że przedstawię podejście funkcjonalno-programistyczne. Możesz przerwać zagnieżdżone funkcje Array.prototype.some() i/lub Array.prototype.every(), tak jak w moich rozwiązaniach. Dodatkową korzyścią tego podejścia jest to, żewylicza tylko własne właściwości wyliczalne obiektu, podczas gdy "a for-in loop enumerates properties in the prototype chain as well".
Blisko Rozwiązanie OP:
Args.forEach(function (arg) {
// This guard is not necessary,
// since writing an empty string to document would not change it.
if (!getAnchorTag(arg))
return;
document.write(getAnchorTag(arg));
});
function getAnchorTag (name) {
var res = '';
Object.keys(Navigation.Headings).some(function (Heading) {
return Object.keys(Navigation.Headings[Heading]).some(function (Item) {
if (name == Navigation.Headings[Heading][Item].Name) {
res = ("<a href=\""
+ Navigation.Headings[Heading][Item].URL + "\">"
+ Navigation.Headings[Heading][Item].Name + "</a> : ");
return true;
}
});
});
return res;
}
rozwiązanie, które zmniejsza Iterowanie nad pozycjami/pozycje:
var remainingArgs = Args.slice(0);
Object.keys(Navigation.Headings).some(function (Heading) {
return Object.keys(Navigation.Headings[Heading]).some(function (Item) {
var i = remainingArgs.indexOf(Navigation.Headings[Heading][Item].Name);
if (i === -1)
return;
document.write("<a href=\""
+ Navigation.Headings[Heading][Item].URL + "\">"
+ Navigation.Headings[Heading][Item].Name + "</a> : ");
remainingArgs.splice(i, 1);
if (remainingArgs.length === 0)
return true;
}
});
});
Oto dobry przykład wyłamywania się z pętli i bloków kodu: https://marcin-chwedczuk.github.io/break-out-of-code-block-in-java-and-javascript – csharpfolk