2014-12-02 2 views
0

나는 그것을 전달하는 obj가 이미 배열 내에 있는지 확인하기 위해 indexOf를 사용하려고합니다. 그것은 작동하지 않는 것 같습니다. 다음은 배열에 항목을 추가하는 코드입니다.쇼핑 바구니 indexOf

자바 스크립트 :

add: function(id, item, description, price, itemObj) { 
      if(items.indexOf(itemObj) == 1) { 
       console.log(itemObj); 
       items.forEach(function(item){ 
        if(item.id === id){ 
         item.itemCount += 1; 
        }; 
       }); 
      } else { 
       console.log(itemObj); 
       items.push(new basket.Item(id, item, description, price)); 
      }; 
      basket.print(); 
     } 

더 설명하기 위해, 그것은 if 문 실행되지 않습니다 항상 배열에 새 개체를 전달에 의존합니다.

+0

통화 기능에 항목이 있으며 통화와 일치하지 않는 방식으로 아래 항목을 사용합니다. – rfornal

+0

죄송합니다. 설명해 주시겠습니까? – hudsond7

+0

foreach 함수 내에서 itemOf 및 forEach를 사용하는 대신 function (id,'item', description ...을 사용하면 item :: ** s **를 사용하고 있습니다.) – rfornal

답변

0

indexOf가 배열의 값과 일치하는지 확인하지 못합니다. 문자열 안에있는 하위 문자열과 일치한다고 생각합니다.

items = ["first", "second", "third"]; 

items.join(""); 

// now items = "firstsecondthird"; 

var ind = items.join("").indexOf("first"); //ind here is greater or equal than 0 

var ind = items.join("").indexOf("firstone"); //ind here is equal -1 (any comparison in the string) 

것은 같이 IndexOf이 검색되는 것을 유의하십시오

if(items.join("").indexOf(itemObj) >= 0) { 

그럼 함수는 문자열, 예를 구축하기 위해 값을 연결 가입 : 반환 값이 크거나 같으면 0 인 경우 또한, 당신은 확인해야합니다 문자열에서 첫 번째 비교를 위해. 이 문자열이 abcdefga이고 aindexOf 인 경우 첫 번째 비교가 시작 부분에 있으므로 반환 값은 0입니다. 마지막 비교를 검색하려면 lastIndexOf이됩니다.

+0

조금 더 설명해 주시겠습니까? – hudsond7

+0

@ 허드슨 7 물론. – Verhaeren

+0

이 답변은 틀린데 -'Array.prototype.indexOf()'는 실제로 존재합니다 (일부 오래된 브라우저에서는 사용할 수 없지만) 제안 된 솔루션은'items.join ("")'이 먼저 배열의 각 요소를 문자열로 변환합니다. 객체의 경우에는 아마도 [object object] 일 것이므로 너무 유용하지는 않습니다. – rhino