2017-08-18 5 views
-2

基本的にはendsWith()のように動作するjavascript関数を作成していますが、文字列(最初の引数、str)が指定の文字列(第2引数、target)で終わるかどうかを確認します。 Javascriptの部分文字列の一致でエラーが発生しました

function confirmEnding(str, target) { 
 
    tarLen=target.length; 
 
    strLen=str.length; 
 
    substring = str.slice(strLen-tarLen-1, strLen); 
 
    if(substring==target) 
 
    {return true;} 
 
    else 
 
    return false; 
 
    
 
} 
 

 
confirmEnding("Sangha", "ha");
コンパイル時に

、それは答えがfalseを返すたびに。しかし私は自分のコードに何らかの欠陥を見つけることはできません。どんな助けもありがとう。

+0

あなたは[String.prototype.endsWith()]のドキュメントを参照してくださいました役立つことを願っていますhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith)?あなたのブラウザがまだそれをサポートしていない場合には、refrence実装があります。 – xander

+0

これは本当に簡単にデバッグできます。紙とペンが一枚であれば... – deceze

+0

新しい変数を宣言すると、varを使用します。コードtarLenの場合、strLenと部分文字列はグローバルとして扱われます。 – Krzysiek

答えて

0

離れ-1あなたslice()機能から取る:

function confirmEnding(str, target) { 
 
    tarLen=target.length; 
 
    strLen=str.length; 
 
    substring = str.slice(strLen-tarLen, strLen); 
 
    if(substring==target) 
 
    {return true;} 
 
    else 
 
    return false; 
 
    
 
} 
 

 
console.log(confirmEnding("Sangha", "ha")); 
 
console.log(confirmEnding("Sangha", "hda"));

を短縮バージョン:

function confirmEnding(str, target) { 
 
    var strLen = str.length; 
 
    return target == str.slice(strLen - target.length, strLen); 
 
} 
 

 
console.log(confirmEnding("Sangha", "ha")); 
 
console.log(confirmEnding("Sangha", "hda"));

lastIndexOf()を使用バージョン:

function confirmEnding(str, target) { 
 
    return str.lastIndexOf(target) == (str.length - target.length); 
 
} 
 

 
console.log(confirmEnding("Sangha", "ha")); 
 
console.log(confirmEnding("Sangha", "hda")); 
 
console.log(confirmEnding("hahahahahahaha", "ha"));

0

スライス()メソッドは、新しい配列オブジェクトにアレイの一部の浅いコピーを返し

function confirmEnding(str, target) { 
    tarLen=target.length; 
    strLen=str.length; 

    console.log(tarLen) 
    console.log(strLen) 

    substring = str.slice(strLen-tarLen, strLen); 
    console.log(substring) 

    if(substring==target) 
    {return true;} 
    else 
    return false; 

} 

これを試してみてください始まりから終わりまで(終わりは含まれていない)から選択される。 (link

4

スライスが間違っています。コンソールで部分文字列を入力して確認すると、「gha」と表示されます。あなたはそのstr.sliceに-1を必要としません。文字列の最後まですべての文字を取得したいので、2番目の引数は必要ありません。

グローバルコンテキストでのリークを防ぐために、あなたのvarsを宣言することを強くお勧めします。

function confirmEnding(str, target) { 
    var tarLen=target.length; 
    var strLen=str.length; 
    var substring = str.slice(strLen-tarLen-1, strLen); 
    if(substring==target) 
    {return true;} 
    else 
    return false; 

} 
0

-1を使用する必要はないと思います。私は(次の

function confirmEnding(str, target) { 
    var tarLen=target.length; 
    var strLen=str.length; 
    var substring = str.slice(strLen-tarLen, strLen); 
    if(substring==target) 
    {return true;} 
    else 
    return false; 

} 

confirmEnding("Sangha", "ha"); 
関連する問題