2016-05-02 12 views
0

配列の1つの要素(arr[0])が配列の2番目の要素(arr[1])と等しいかどうかをチェックするこの小さなスクリプトがあります。しかし、次の配列をチェックすると、それはfalseを返しますが、それでもtrueを返します。だから私の質問は、なぜ返すtrue、どのように返すように私はそれを修正することができますfalse期待どおり?配列のインデックスの1つの要素が2番目の要素と等しいかどうかを調べる

function mutation(arr) { 
    var elem0 = arr[0].toLowerCase(); 
    var elem1 = arr[1].toLowerCase(); 

    for(var x=0; x < elem1.length; x++){ 
    check = elem0.indexOf(elem1[x]); 
    if(check === -1){ 
     return false; 
    } 
    return true; 
    } 
} 

mutation(["hello", "hey"]); //returns true 

答えて

1

あなたが(実際にはどのようなelem1見るあなたは、文字列内の文字をループしているので、

function mutation(arr) { 
    var elem0 = arr[0].toLowerCase(); 
    var elem1 = arr[1].toLowerCase(); 

    for(var x=0; x < elem1.length; x++){ 
    check = elem0.indexOf(elem1[x]); 
    if(check === -1){ 
     return false; 
    } 

    } 
    return true; 
} 

mutation(["hello", "hey"]); //returns false 
+1

十分で、それがどこにあるか、なぜそれが重要ですか?なぜ 'for'ループの中にあるときtrueを返しますが、ループの外側で' false'を返すのはなぜですか? – 13aal

+1

'for'ループに置いたときに' for'ループの外側に置いたときの最初の繰り返しのループを返します。チェック**すべて**の文字です。返されない場合はtrueを返します – Zamboney

+0

ああ!さて、それは意味をなさない。ちょっと冷たい、ありがとう。私はこれを5分で受け入れるでしょう – 13aal

1

ようfor文の後にそれを配置する必要がありreturn trueにすぐ

を置きます)であるため、の最初の文字(h)が実際には文字列にあるため、trueが得られます0。

文字列全体を反復処理するのを待つ場合は、ブール値フラグを使用し、反復が終了したらそのフラグの値を返します。

しかし、あなただけの2つの要素を比較したいようだ:

return elem0 === elem1; 
1

私は、アレイ の一つの要素は、(ARR [0])に等しいかどうかをチェックします。この小さなスクリプトを持っています配列の2番目の要素e、要素ハロー両方であるので

([1] ARR)これは真を返すちょっと

コードは基本的に文字列内のすべての文字を反復処理しています。

あなたは、単にこの質問の発現は、いくつかの論理的欠陥または少なくともいくつか欠けている点を持っている

function mutation(arr) { 
    return arr[0].toLowerCase() == arr[1].toLowerCase(); 
} 
1

をチェックする必要があります。指定された条件などは、配列内のすべての項目が等しい必要があることを意味します。このような場合は、命令の一つだけの小さな作品は

myArray.every(e => e == myArray[0]) 

var a = [1,1,1,1,1,1,1,1], 
 
    b = ["hello", "hey"]; 
 

 
document.write("<pre> a array :" + a.every(e => e == a[0]) + "</pre>"); 
 
document.write("<pre> b array :" + b.every(e => e == b[0]) + "</pre>");

+0

私はそれが好きですが、それはまっすぐですが、私は配列が他の配列の内側にあるかどうかを調べようとしていました – 13aal

関連する問題