2016-06-23 3 views
0

저는이 간단한 스크립트를 몇 시간 동안 사용해 왔으며 벽에 부딪혔습니다. JSON 값으로 구성된 Array가 있습니다. 사용자가 문자열을 검색하고 버튼을 클릭하면 스크립트는 배열에 저장된 값과 문자열을 비교합니다.배열의 문자열 값 찾기

내가 붙어있는 부분은 조건부입니다. 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