views:

29

answers:

1

Hey, I am searching each array separately for specific inputs from a user.

if ($.inArray(i.val(), helloInputArray) > -1) { //IF HELLO
                    if (hello == 0) { //HAVE YOU ALREADY SAID HI?
                        r = Math.floor(Math.random()*4);                        
                        o.html(o.html()+helloOutputArray[r]);
                        hello = 1;
                        i.val('');
                    } else { //IF YOU'VE ALREADY SAID HI...
                        o.html(o.html()+'I already said hi to you!<br />');
                        i.val('');
                    }
                } else if ($.inArray(i.val(), byeInputArray) > -1) { //IF GOODBYE
                    if (bye == 0) {
                        r = Math.floor(Math.random()*4);                        
                        o.html(o.html()+byeOutputArray[r]);
                        i.val('');
                    } else {
                        o.html(o.html()+'I already said goodbye... Go away!');
                        i.val('');
                    }
                }

Is there any way I can just search all arrays at once, as I'm going to need to search each array for a string.

ahem

so - If I typed 'ae', then I want it to go through every item in every array and return ALL the strings with 'ae' in it.

^_^ <( bad wording... )

+2  A: 

If I'm understanding you correctly, you want to consolidate your separate arrays into one for the purpose of doing one loop, but you don't want to modify the original arrays.

If so, try this:

if( $.inArray( i.val(), helloInputArray.concat( byeOutputArray) ) > -1 ) {
    ...

The .concat() method will create a copy of the two Arrays joined together as one, so the originals are not modified. That copy is passed to the $.inArray() method as the second parameter.


EDIT:

From your comment below, it sounds like you want to test if i.val() is a substring of any items in the array.

If that's right, you probably won't use $.inArray, but rather will use $.each() to iterate of the Array, and test for the value.

var isInArray = false;
var value = i.val();

$.each( helloInputArray.concat(byeOutputArray), function(i,val) {
    if( val.indexOf( value ) > -1 ) {
        isInArray = true;
        return false;
    }
});

if ( isInArray ) > -1) { 
    if (hello == 0) { 
        r = Math.floor(Math.random()*4);                        
        o.html(o.html()+helloOutputArray[r]);
      ...
patrick dw
Excellent, this looks good thus far! I was wondering how I would go about searching within each string in the array as well?
Neurofluxation
@Neurofluxation - So you want to search to see if `i.val()` is in any part of any of the Array items? Does that sound right? I'll update in a minute.
patrick dw
Perfectly explained :)
Neurofluxation
@Neurofluxation - I just updated. Give it a try.
patrick dw
@patrick - perfect +rep for you! Thanks.
Neurofluxation
@Neurofluxation - You're welcome. :o)
patrick dw