2016-12-15 4 views
-1

私は配列を作成し、与えられた入力が実際に配列内にあるかどうかを調べるために、 'for'ループを使って真の入力を調べるためにその配列に行きます。私はそれが真の真の値とアラートを見つけると、それはそれは、アレイ内の他のすべてのエントリのための偽の警告しかし、ポイントにを動作するようになりました。jQuery loop get data

$(function(){ 


$('button').on('click', function() { 
    var name = $('#name').val() 


    // Users 
    var pers = ['John', 'Apples', 'Emily', 'Banana', 'Chris', 'Orange']; 


for (var i in pers) { 
    if(pers[i] == name) { 
     $('body').append('<h3> You like ' + pers[++i] + '!'); 
    } else { 
     alert('false'); 
    } // IF 
    } // Loop 
    }); // Button 
}); // Function 
+1

はい、はい。それはまさにそうするでしょう。 'else'ブロックだけを完全に削除できますか? – David

+0

クールなので、あなたが言うことをするコードを持っています。 –

+0

を脇に - 配列を反復するために 'for..in'ループを使うべきではありません。 'for array' forEach'または 'for..of'または' for(var i = 0; i Punit

答えて

0

すべての初心者がこのように間違っているようです。ループを終了するまで要素が見つからないことはわかりません。たとえ一致するものがあったとしても、一致しないすべてのアイテムについてfalseに警告しています。一致したときにフラグを設定し、ループの最後にフラグが設定されているかどうかをチェックする必要があります。

これには配列を使用しないでください。オブジェクトを使用してマッピングを実装する必要があります。

var pers = { John: 'Apples', Emily: 'Banana', Chris: 'Orange' }; 
if (pers.hasOwnProperty(name)) { 
    $('body').append('<h3> You like ' + pers[name] + '!'); 
} else { 
    alert("false"); 
} 
+0

それはうまくいきますが、どのように動作するのかわかりませんが、それはありません。しかし、今やappendは果物ではなく果物ではなく名前を吐き出します。++の名前が付いていて、私のループがなければ、それを修正する方法は正直に分かりません。 – Unkn0wn

+0

私はそれが何をしているのか分からなかった。配列を使用すべきではありません。名前を果実にマップするオブジェクトを使用する必要があります。 '{John: 'Apples'、Emily: 'Banana'、Chris: 'Orange'}' – Barmar