2011-11-03 16 views
2

パターンが文字列内の文字列(大文字と小文字は区別されます)に表示されている場合はtrueを返しますが、パターンのすべての文字が(順序にかかわらず)文字列で表示される場合は、その機能を拡張してtrueを返します。例えばパターンの個々の文字がすべて文字列に含まれている場合はtrueを返す

match1("adipisci","pis") returns true 

私は今、それがこのやりたいのに対し:

match1("adipisci","sciip") returns true 
match2("adipisci","sciipx") returns false because x does not exist in variable 

を私が困難にこれを実装したのです

これは、プログラムが現在何をするかです私のコード:

var pages=[ 
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", 
    "Nulla imperdiet laoreet neque.", 
    "Praesent at gravida nisl. Quisque tincidunt, est ac porta malesuada, augue lorem posuere lacus, vitae commodo purus nunc et lacus." 
    ]; 
var search_term = prompt('Type in search term: ','Search word'); 
// ask which search term the user wants to search for with default being 'Search Term' 
function find_s(w) { 
    var indexes = [0,0,0] // create an array to hold pages where search term found 
    var iii = 0 // create variable to increment the number of finds in each page 
    for (var ii=0;ii<pages.length;ii++) { 
    // for each page in the array 
     for (var i=0;i<pages[ii].length;i++) { 
     // for each character in the chosen page 
      if (pages[ii].substr(i,w.length).toLowerCase()==w.substr(0,w.length).toLowerCase()) { 
      // check to see if the search term is there ignoring case 
       iii++; 
       // increment number of times the search term in found 
       while(pages[ii].substr(i,1)!=" ") { 
        // move to the next word but checking for spaces 
        i++; 
        } 
      } 
     } 
     indexes[ii]=iii; 
     // update the number of times the search term is found in that page 
     iii=0; 
     // reset counter for next page search 
    } 
    return (w + " was found in this may times in each page " + indexes); 
    // let the user know the result 
} 
alert (find_s(search_term)); 

私は正しい方向へのガイダンスをお寄せいただきありがとうございます。

答えて

1

ソリューションを次の関数である:証拠として

var containsChars = function(where, what){ 
    var containsChar = function(where, what){ 
     return !!(where.indexOf(what)+1); 
    }  
    var allChars = what.split(''); 
    for (var i=0; i<allChars.length; i++){ 
     if (!containsChar(where, allChars[i])){ 
      return false; 
     } 
    } 
    return true; 
} 

this jsfiddleを参照してください。

私は意図的にあなたが文字を(あなたがそれらを大文字と小文字を区別したり、大文字小文字を区別しない方法で比較するかどうかによって異なります)と比較されている方法を変更するので、それは簡単です機能containsChar()を分離しています。

+0

'var allChars = what.split( '');' - 行は何をしますか? – methuselah

+1

@jeansymolanza:この行は、文字列(変数 '' '' ')を個々の文字に分割します(空の文字列' '''をパラメータとして渡した場合、 'split()'メソッドはそのように動作します) allChars'」を参照してください。十分ですか? – Tadeck

1

これは、needlesのすべての文字がhaystackに存在するかどうかを示します。

var match1 = function(haystack, needles) { 
    var chars = needles.split(''); 

    for (var i = 0, length = chars.length; i < length; i++) { 
     if (haystack.indexOf(chars[i]) === -1) { 
      return false; 
     } 
    } 

    return true; 
} 

jsFiddle

+0

'var chars = needles.split( '');'この行は何をしますか? – methuselah

+1

@jeansymolanza文字列の個々の文字を配列に分割します。 – alex

1

このような機能は、トリックを行うダメ:あなたが期待するものを達成するために

function allChars(lookIn, lookFor) { 
    for(var i = 0; i < lookFor.length; ++i) { 
     var c = lookFor.charAt(i); 
     if(lookIn.indexOf(c) == -1) 
     return false; 
    } 
    return true; 
} 
+0

逆の順序で出力が返されるのはなぜですか? – methuselah

+0

この関数は 'true'または' false'を返します。 "出力"は返さないでください。 – rossipedia

+0

'for(var i = 0; i methuselah

関連する問題