Проверка вхождения элемента в массив. Добавление и удаление из избранного с помощью 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;
}
}
Объясните как должно быть и аргументируйте.