Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript Loops within a Loop character testing

I have a loop that goes through a huge string of characters. Checks each digit against individual digits in another string and highlights the matches...

var decypher = "782137829431783498892347847823784728934782389";

var systemPass = "789544";

for (var x = 0; x < decypher.length; x++) { //loop through the array
    var switcher = 0; //not run this row yet
    for (var p = 0; p < systemPass.length; p++) { //loop through each digit in the password
        if(eval(decypher[x]) === eval(systemPass[p])) { //if the password digit matches the array digit
            if (switcher === 0) { //not run yet...
                $('body').append("<p style='color: green; float: left;'>"+decypher[x]+"</p>");
                switcher = 1; //finished running
            }
        } else { //no match
            if (switcher === 0) { //not run yet...
                $('body').append("<p style='color: silver; float: left;'>"+decypher[x]+"</p>");
                switcher = 1; //finished running
            }
        } 
    }   
}

JSFiddle Example: http://jsfiddle.net/neuroflux/J4wbk/12/

My question is, how come it's only ever highlighting the 7's? I've been scratching my head for ages over this!

[EDIT]
Thanks to "@Yograj Gupta" - I've removed the switcher variable, but now I get multiple instances of each character: http://jsfiddle.net/neuroflux/J4wbk/22/

like image 458
Barrie Reader Avatar asked Mar 16 '26 09:03

Barrie Reader


1 Answers

Well, you're definitely doing this the hard way. Use indexOf instead (or, as Johan pointed out, jQuery.inArray):

http://jsfiddle.net/CrossEye/euGLn/1/

var decypher = "782137829431783498892347847823784728934782389";
var systemPass = "789544";

for (var x = 0; x < decypher.length; x++) {
    // if(systemPass.indexOf(decypher[x]) > -1) { // Thanks, Johan
    if ($.inArray(decypher[x], systemPass) > -1) {
        $('body').append("<p style='color: green; float: left;'>"+decypher[x]+"</p>");
    } else { //no match
        $('body').append("<p style='color: silver; float: left;'>"+decypher[x]+"</p>");
    } 
}

Although there's lots of other clean-up to recommend here, at least the loop is easier.

-- Scott

like image 172
Scott Sauyet Avatar answered Mar 18 '26 21:03

Scott Sauyet



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!