2016-06-23 22 views
0

私は数時間この単純なスクリプトに取り組んできました。 JSON値で構成される配列があります。ユーザーが文字列を検索してボタンをクリックすると、スクリプトは文字列を配列に格納されている値と照合します。配列の文字列の値を見つけよう

私が執着しているセクションは、JSONファイル内にあることがわかっている文字列を入力しても、常に一致を返さない条件付きのセクションです。

以下のコード。あらゆる指針/指針は非常に高く評価されます。

ありがとうございました!

マーク。

$('#validate-info').on('click', function(){ 

     // Get data, initiate callback 
     $.getJSON('memberships.json', validateMembership); 
     // Execute callback function 
     function validateMembership(data) { 

     // Capture entered value 
     var userVal = document.getElementById('form-data').value; 
     console.log(userVal); 

     var infoTxt = ''; 

     // Push all items into an Array 
     var infoArray = []; 

     $.each(data, function(member, memberInfo) { 
      infoTxt += '<p><strong>Name:</strong> ' + memberInfo.name + '<br />'; 
      infoTxt += '<strong>Membership No.:</strong> ' + memberInfo.number + '<br />'; 
      infoTxt += '<strong>Expiry Date:</strong> ' + memberInfo.expiry + '</p>'; 
      infoArray.push({ 
       name: memberInfo.name, 
       number: memberInfo.number, 
       expiry: memberInfo.expiry 
      }); 
     }); 

     if ($.inArray(userVal, infoArray) > -1) { 
      // the value is in the array 
      $('#response').html('<p style="color: green;">In the array</p>'); 
     } else { 
      $('#response').html('<p style="color: red;">Sorry, no matches.</p>'); 
     } 

     } 

    }); 
+0

オブジェクトの配列から一致する文字列を検索しようとしています。 'name'プロパティに' userVal'をマッチさせようとしていますか? –

+0

'each'ループをチェックして、フラグ変数をtrueに設定してください。一致するものがある場合 – charlietfl

答えて

1

入力文字列とオブジェクトを比較すると、一致しないことがあります。あなたは単に名前と比較する必要があります。 Array.prototype.some関数を使用して、一致するものがあるかどうかをテストできます。

if (infoArray.some(function(obj) { 
    return obj.name == userVal; 
})) { 
    $('#response').html('<p style="color: green;">In the array</p>'); 
} else { 
    $('#response').html('<p style="color: red;">Sorry, no matches.</p>'); 
} 

infoArrayにプッシュするループの間に行うこともできます。

var match = false; 
$.each(data, function(member, memberInfo) { 
    infoTxt += '<p><strong>Name:</strong> ' + memberInfo.name + '<br />'; 
    infoTxt += '<strong>Membership No.:</strong> ' + memberInfo.number + '<br />'; 
    infoTxt += '<strong>Expiry Date:</strong> ' + memberInfo.expiry + '</p>'; 
    infoArray.push({ 
     name: memberInfo.name, 
     number: memberInfo.number, 
     expiry: memberInfo.expiry 
    }); 
    if (memberInfo.name == userVal) { 
    match = true; 
    } 
}); 

if (match) { 
    $('#response').html('<p style="color: green;">In the array</p>'); 
} else { 
    $('#response').html('<p style="color: red;">Sorry, no matches.</p>'); 
} 
+0

ありがとうBarmar。大きな洞察力と私は多くの助けになりました。これを単純な真実/虚偽の状態を超えて拡大する方法はありますか?たとえば、私がマッチを得た場合、マッチした値を返す方法は? たとえば、memberInfo.nameの値がuserValとの一致を返した場合、一致するオブジェクト値を出力できるようにしたいとします。 –

+0

マッチすると、それを変数に入れ、ループが完了した後にその変数を使用します。 – Barmar

+0

'if(memberInfo.name == userVal){match = memberInfo; } ' – Barmar

関連する問題