Проверка вхождения элемента в массив. Добавление и удаление из избранного с помощью cookie

Я смотрел 10. Избранное. 01. Скрипт добавления товара в избранное с 11:30-13:30. Там приведен следующий код добавления и удаления элемента массива (товара в Избранное) в сookie

function actionFav(action, id) 
{
    var favorite = JSON.parse(getCookie('favorite'));
    if (favorite == null || !(favorite instanceof Array)
        favorite = [];
    
    var inArr = false;
    // проверим существование товара в массиве избранного
    for (i=0; i<favorite.length; i++) {
        if (favorite[i] == id) {
            if (action == 'del') { favorite.splice(i, 1); };
            inArr = true;
        }
    }
    
    // если товара нет в корзине, то добавим
    if (action == 'add' && (!inArr)) { favorite.push(id); };
    var d = new Date();
    d.setMonth(d.getMonth() + 1);
    setCookie ('favorite', JSON.stringify(favorite), d.toUTCString(), '/');
    
    return favorite;
}


function setCookie (name, value, expires, path, domain, secure) 
{
    document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain" + domain : "") +
        ((secure) ? "; secure" + secure : "");
}

function getCookie(name)
{
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
        offset = cookie.indexOf(search);
        if (offset != 1) {
            offset += search.length;
            end = cookie.indexOf(";", offset);
            if (end != -1) {
                end = cookie.length;
            }
            setStr = unescape(cookie.substring(offset, end));
        }
    }
    
    return setStr;
}

Интересует в нем блок кода

    for (i=0; i<favorite.length; i++) {
        if (favorite[i] == id) {
            if (action == 'del') { favorite.splice(i, 1); };
            inArr = true;
        }
    }
    
    // если товара нет в корзине, то добавим
    if (action == 'add' && (!inArr)) { favorite.push(id); };

Как мне кажется должно быть так

    for (i=0; i<favorite.length; i++) {
        if (favorite[i] == id) {
            if (action == 'del') { favorite.splice(i, 1); }
      else
            { inArr = true;}
        }
    }
    
    // если товара нет в корзине, то добавим
    if (action == 'add' && (!inArr)) { favorite.push(id); };

потому что если происходит удаление, то inArr должно становиться ложью после строки

if (action == 'del') { favorite.splice(i, 1); };

а в противном случае (когда не производилось удаление) inArr должно быть истиной, т. к. элемент со значением id был найден в массиве, т.е. сработала строка

    if (favorite[i] == id) {...}

и при этом не производилось удаление элемента из массива. Поэтому я полагаю, что должно быть так

    for (i=0; i<favorite.length; i++) {
        if (favorite[i] == id) {
            if (action == 'del') { favorite.splice(i, 1); }
      else
            { inArr = true;}
        }
    }

вместо

for (i=0; i<favorite.length; i++) {
    if (favorite[i] == id) {
        if (action == 'del') { favorite.splice(i, 1); };
        inArr = true;
    }
}

Объясните как должно быть и аргументируйте.


Ответы (0 шт):