Is there a Javascript equivalent of the python \'for-else\' loop, so something like this:
searched = input(\"Input: \");
for i in range(5):
if i==searched:
There is no built-in JavaScript equivalant.
You can emulate this by using return
as a control flow. You can put your for
loop in an IIFE and use the return to move beyond conditions afterwards. This does mean that var
s don't pollute the scope above with variables.
(function() { // Or `(() => {` in ES6 // Python equivalent:
for (/* for loop body*/) { // for :
if (/* Condition */) { // if :
// Met condition //
return; // Goes past the else // break
} //
}//else { // else:
// Never met the condition //
//}
})();
This has the advantage of not using a flag. It is now inside another function, however, so you cannot declare variables to be used outside. You can still get and set variables in the scope above, so you just have to have the var
statements outside of the function.
A working example for what you wanted to do:
(function(arr, value) {
for (var i = 0, length = arr.length; i < length; i++) {
if (arr[i] === value) {
console.log("Match found: " + arr[i]);
return;
}
}//else {
console.log("No match found!");
//}
})([0, 1, 2, 3, 4], +prompt("Input: "));
If you are doing this often, you can create a function to do most of it for you.
function search(arr, condition, forBody, elseBody) {
for (var i = 0, length = arr.length; i < length; i++) {
if (condition(arr[i], arr)) { // if
return forBody(arr[i], arr); // then
}
}
return elseBody(arr); // else
}
var value = +prompt("Input: ");
search([0, 1, 2, 3, 4],
i => /* if */ i === value,
i => /* then */ console.log("Match found: " + i),
() => /* else */ console.log("No match found!"));