1

I don't see my mistake here. I want to check if one of the words (Day, Days, Hour, Hours) is included in an array of strings.

        let cardAuctionRemainingTimeString = document.querySelectorAll('.time');
        let arrayCardAuctionTimeRemaining = [];
        for (let times = 0; times < cardAuctionRemainingTimeString.length; times++) {
            let time = cardAuctionRemainingTimeString[times].textContent;
            arrayCardAuctionTimeRemaining.push(time);
        }
        await sleep(150);
        if (arrayCardAuctionTimeRemaining.includes('Hour')) {
            isActive = false;
            console.log('Above one hour');
        } else if (arrayCardAuctionTimeRemaining.includes('Hours')) {
            isActive = false;
            console.log('Above one hour');
        } else if (arrayCardAuctionTimeRemaining.includes('Day')) {
            isActive = false;
            console.log('Above one hour');
        } else if (arrayCardAuctionTimeRemaining.includes('Days')) {
            isActive = false;
            console.log('Above one hour');
        } else {
            console.log('under 1 hour');
        }

I am iterating over a few pages and push time information which is added as strings, into the array arrayCardAuctionTimeRemaining . The array can contain some strings like this: ["1 Hour", "2 Days", "2 Hours"].

I want to stop iterating if the time left is more than 59 minutes basically. But for some reason, it's not working. The code is always going into the else also if one of the words is included.

The HMLT is within a user-only section. But I upload a screen if u wish: enter image description here

2
  • 2
    Please include your html, so we can see the contents of your .time elements Commented Oct 29, 2021 at 14:18
  • I believe Array.includes() looks for an exact match, so if there are numbers before the text string, it would return false. I would use arrayCardAuctionTimeRemaining.includes('Hours') > -1 instead and put the plurals (Days, Hours) before the singulars (Day, Hour) in your if-else statements. Commented Oct 29, 2021 at 14:36

1 Answer 1

2

Includes checks if the array Contains The exact string you are looking for. So you need to loop through each of the elements of the array and check

since the inside of your if block is the same you can do the checking for day and hour in one go

let isActive = true;
arrayCardAuctionTimeRemaining.some(str => {
    if(str.match(/Hour|Day/)){
        console.log("Above one hour")
        isActive = false
        return true
    }
})

if(isActive) console.log('under 1 hour');
Sign up to request clarification or add additional context in comments.

1 Comment

exactly what I needed! Thanks!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.