Trying to create a function that checks a password for integers and then return an object which will store a boolean representing whether the password contains an integer, and then destructure the boolean out of the function, but I keep getting this problem...
function checkForInteger(password) {
const arrayOfIntegers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
let intBoolean = {};
arrayOfIntegers.forEach((int) => {
if (password.includes(int)) {
intBoolean = { integerIsPresent: password.includes(int) };
} else {
intBoolean = { integerIsPresent: password.includes(int) };
}
});
return intBoolean;
}
checkForInteger("3gufr"); //returns {integerIsPresent:false}
CodePudding user response:
You're replacing intBoolean
each time through the loop. So if 3
is found, you'll set it to {integerIsPresent: true}
on that iteration, but then replace it with {integerIsPresent:false}
on the remaining iterations.
Initialize it to false
before the loop, and only set it to true
when you get a match.
function checkForInteger(password) {
const arrayOfIntegers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
let intBoolean = {
integerIsPresent: false
};
arrayOfIntegers.forEach((int) => {
if (password.includes(int)) {
intBoolean.integerIsPresent = true;
}
});
return intBoolean;
}
console.log(checkForInteger("3gufr"));
You can also simplify it by using Array.some()
function checkForInteger(password) {
const arrayOfIntegers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
let intBoolean = {
integerIsPresent: arrayOfIntegers.some(int => password.includes(int))
};
return intBoolean;
}
console.log(checkForInteger("3gufr"));
or you can use a regular expression.
function checkForInteger(password) {
return {
integerIsPresent: !!password.match(/\d/)
};
}
console.log(checkForInteger("3gufr"));
password.match()
returns an array when there's a match. !!
converts that to a boolean.
CodePudding user response:
You could probably adjust your logic a little. forEach
doesn't allow to you break out of the loop - for/of
does.
Loop over the array. If there is a match return the object containing the match, otherwise return an object with a false value.
const arrayOfIntegers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
function checkForInteger(password) {
for (const el of arrayOfIntegers) {
if (password.includes(el)) {
return { integerIsPresent: el };
}
}
return { integerIsPresent: false };
}
console.log(checkForInteger('3gufr'));
console.log(checkForInteger('nnh5dd'));
console.log(checkForInteger('abcdef'));
CodePudding user response:
this is how i resolved the issue though, thanks a lot @Barmar
function checkForInteger(password) {
const arrayOfIntegers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const checkPassword = (el) => password.includes(el);
const integerIsPresent = arrayOfIntegers.some(checkPassword);
// console.log(integerIsPresent);
return integerIsPresent;
}
CodePudding user response:
try this.
example:
const checkForInteger = (pass) => pass.split('').reduce((acc, ele) => {
let int = parseInt(ele);
if(!isNaN(int)) acc.isPresentInt = true;
return acc;
}, {isPresentInt: false})
const res = checkForInteger("3gufr");
result:
{ isPresentInt: true }
Took the password, parsed it out by converting it to an array, then looped through the array and checked each character until it found an integer and modified the accumulated value