2012-10-05 4 views
1

내가 검색 상자가 있고 무엇이든 그것을에 입력이로 저장됩니다 말할 수 :유사한

var search_input = $(this).val(); 

가 어떻게이 값 내 배열을 검색 할 것인가?

var devices = [{"Device_ID":"43","Image":"Amazon-Kindle-Fire.png","Manufacturer":"Amazon","Model":"Kindle Fire","Type":"Tablet"},{"Device_ID":"44","Image":"Apple-iPad.png","Manufacturer":"Apple","Model":"iPad","Type":"Tablet"}] 

그래서 search_input 변수에 Amazon 또는 Kindle 등이 있다고 가정하면 어레이를 검색하여 아래에 출력해야합니다. 동일은

<div id="device">43</div> 
<div id="image">Amazon-Kindle-Fire.png</div> 
<div id="name">Amazon Kindle Fire</div> 
+0

원하는 것을 얻기 위해 $ .each 함수와 JavaScript indexOf 함수를 사용하여 문자열을 검색하여 배열을 반복합니다. indexOf 함수를 사용하는 객체의 속성은 "name"속성입니다. 결과를 출력하는 방법을 말해 주면 예제를 줄 수 있습니까? 나는. Jquery Templates를 사용하여 일치하는 항목이 발견되면 결과를 출력하는 예제를 제공하겠습니까? – Kwex

답변

6

간단한 루프

var devices = [{"Device_ID":"43","Image":"Amazon-Kindle-Fire.png","Manufacturer":"Amazon","Model":"Kindle Fire","Type":"Tablet"},{"Device_ID":"44","Image":"Apple-iPad.png","Manufacturer":"Apple","Model":"iPad","Type":"Tablet"}]; 

function findItem (term) { 
    var items = []; 
    for (var i=0;i<devices.length;i++) { 
     var item = devices[i]; 
     for (var prop in item) { 
      var detail = item[prop].toString().toLowerCase(); 
      if (detail.indexOf(term)>-1) { 
       items.push(item); 
       break;    
      } 
     } 
    } 
    return items; 
} 

console.log(findItem("amazon")); //returns one item 
console.log(findItem("kindle")); //returns one item 
console.log(findItem("apple")); //returns one item 
console.log(findItem("tablet")); //returns two items 
console.log(findItem("nerd")); //returns zero items 
​ 

jsFiddle

+0

내 var search_input = $ (this) .val();을 묶는 방법은 무엇입니까? 언급 한대로 세부 정보를 검색하고 출력하기위한 가치? – K20GH

+0

개체에 액세스하여 출력물을 만드는 방법을 모르십니까? 'var result = findItem ("amazon"); 경고 (결과 [0]. 이미지); ' – epascarello

+0

오, 예, 물론 - 죄송합니다 긴 하루! 그래서 대신 Model을 얻고 alert (result [0]. Model)을 사용하려고하면; 콘솔 출력 undefined의 'Model'속성을 읽을 수 없습니다. – K20GH

1

난 당신이 필요하다고 생각 배열에있는 입력 한 것 또는 아무것도 적용됩니다 :

jQuery.inArray() 

http://api.jquery.com/jQuery.inArray/

+0

하지만 객체 배열입니다 – epascarello

+0

도움이 될 수 있습니다 : http://dailyjs.com/2012/09/24/linkedhashmap/ – BLSully

+1

당신 말이 맞습니다!, 죄송합니다, 그 경우에는 "each"를 사용할 수 있습니다. if ($ (this) .device == 43) // } –

1

또 다른 방법은지도와 배열을 대체하는 것 (자바 스크립트 object) 여기서 key는 search_input과 비교할 값입니다. 그렇게하면 키를 찾아 객체를 얻을 수 있습니다. 두 번째 단계는 아직 여기에 대한 답변 XML을 자바 스크립트 객체를 변환 포함

var devices = {"Amazon Kindle": {"Device_ID":"43","Image":"Amazon-Kindle-Fire.png","Manufacturer":"Amazon","Model":"Kindle Fire","Type":"Tablet"},{"Device_ID":"44","Image":"Apple-iPad.png","Manufacturer":"Apple","Model":"iPad","Type":"Tablet"}} 

What's the best way to serialize JavaScript objects to XML?

루프에서
3

나는 생각 이 질문에 목표를 달성하는보다 우아한 방법은 jQuery.grep() - 0123을 참조하십시오.

var search_input = $(this).val(); 
var devices = [ 
     {"Device_ID":"43","Image":"Amazon-Kindle-Fire.png","Manufacturer":"Amazon","Model":"Kindle Fire","Type":"Tablet"}, 
     {"Device_ID":"44","Image":"Apple-iPad.png","Manufacturer":"Apple","Model":"iPad","Type":"Tablet"} 
]; 

var matchingItems = $.grep(devices, function(e) { 
      return (e["Manufacturer"].indexOf(search_input) >- 1 || 
        e["Model"].indexOf(term) > -1); 
}); 

지금 matchingItems는 제조업체 또는 모델 속성에서 단어를 search_input 한 항목의 배열을 포함하고 출력 할 수있는 HTML에서 그.