2016-06-01 7 views
0

쿠키에 마지막으로 본 10 개의 제품을 저장하고 싶습니다. 고유 한 값만 유지해야합니다. 동일한 제품을 두 번 이상 저장하지 않으므로 js-cookie library을 사용하고 이것이 내 코드배열의 값이 jquery인지 확인하십시오.

function getLastViewedProducts() { 
    var pathArray = window.location.pathname.split('/'); 
    var secondLevelLocation = pathArray[1]; 
    var thirdLevelLocation = pathArray[2]; 

    if (secondLevelLocation == 'catalog' && typeof thirdLevelLocation != 'undefined' && $("article[id^='node']").length > 0) { 
     var currentUrl = window.location.href; 
     var currentTitle = $('.node-header h1').html(); 
     var currentImgUrl = $('.field-items .field-item:first-child a img').attr('src'); 

     var productsArray = [{ 'url' : currentUrl, 'title' : currentTitle, 'img' : currentImgUrl }]; 

     if (typeof Cookies.get('lastViewedProductsList') == 'undefined') { 
     // no cookie 
     Cookies.set('lastViewedProductsList', productsArray, { expires: 7 }); 
     } else { 
     // have cookie 
     var arr = Cookies.getJSON('lastViewedProductsList'); 
     if (jQuery.inArray(productsArray, arr)) { 
      if(arr.length > 10) { 
       arr.shift(); 
      } 
     } 
     arr.push(productsArray); 
     Cookies.set('lastViewedProductsList', arr, { expires: 7 }); 
     } 
    } 
} 
getLastViewedProducts(); 

그러나 내 검사 if (jQuery.inArray(productsArray, arr))은 여기서 작동하지 않으며 배열에 동일한 값이 추가됩니다. 왜?

+0

'productsArray' 및'arr'에 무엇이 들어 있는지 확인 했습니까? 검사를 수행하기 바로 전에'console.log (productsArray, arr)'을 실행하고 자바 스크립트 콘솔을 검사하여 데이터가 어떻게 보이는지 확인하십시오. –

답변

1

jQuery.inArray()단일 값이 배열에 있는지 확인합니다. 제공된 코드에서 products 배열은 단일 요소이므로 아무 것도 추가하지 않습니다. 단일 객체를 선언하고 쿠키를 설정할 때 배열로 래핑하는 것이 좋습니다. 주어진 productlastViewedProductsList에있는 경우

var product = {'url':currentUrl,'title':currentTitle,'img':currentImgUrl}; 
... 
Cookies.set('lastViewedProductsList', [product],{expires:7}); 

그럼 당신은 확인할 수 있습니다. 자바 스크립트에서 객체 비교 진리가 조금 어색하기 때문에 각 객체의 단일 속성을 비교하기를 원할 것입니다. 이렇게하려면 사용할 수 있습니다 Array.reduce

var lastViewedProductsList = Cookies.getJSON('lastViewedProductsList'); 
var productInLastViewed = lastViewedProductsList. 
    reduce(function(found,lastViewedProduct){ 
     return found || (product.url === lastViewedProduct.url); 
    },false); 
if(productInLastViewed){ 
.... 
+0

도움을 주셔서 감사합니다. – Heidel

관련 문제