2016-06-01 2 views
0

Я хотел бы сохранить последние 10 просмотренных продуктов в cookie, и мне нужно сохранить только уникальные значения, я имею в виду, не сохранять один и тот же продукт два или более раз, поэтому я использую 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)' и проверьте консоль javascript, чтобы увидеть, как выглядят данные. –

ответ

1

jQuery.inArray() проверяет наличие Значение находится в массиве. В поставляемом массиве продуктов кода используется один элемент, и вы никогда ничего не добавляете к нему. Было бы лучше просто объявить единственный объект и обернуть его в массив, когда вы установите cookie.

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

Затем вы можете проверить, если данный product в вашем lastViewedProductsList. Вы также захотите сравнить одно свойство в каждом объекте, поскольку истины сравнения объектов в JavaScript немного заурядны. Для этого мы можем использовать 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

Смежные вопросы