逻辑运算符始终保持正确?

时间:2017-07-05 18:59:11

标签: javascript arrays cookies

我想要的是将当前网址与我的Cookie数组进行比较,该数组将包含用户访问过的所有网址,以便比较该数组是否包含当前链接,如果不包含,则会推送该新网址链接到数组并将再次使用包含新推送链接的新数组重新创建cookie,所以我现在面临的是每次检查唯一链接的if函数总是实现我不确定是什么&# 39;问题是什么?

请问有人请看一下:

<script type="text/javascript">

function createCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        expires = "; expires=" + date.toUTCString();
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name,"",-1);
}

var url = window.location.href;
var pathname = new URL(url).pathname;
var jsonObj = [];

//jsonObj.push("test");

var x = readCookie('vid_cookies');
if (x) {
var res = x.split(",");
console.log(res);
for (var i = 0; i < res.length; i++) {
    if (pathname != res[i]) {
        alert("IS NOT EQUAL");
    //res.push(pathname);
    //var joinedArray = res.join(",");
    //console.log(joinedArray);
    //createCookie('vid_cookies',joinedArray,7);
    //var z = readCookie('vid_cookies');
    //console.log(z)
    }
}
} else {
    jsonObj.push(pathname);
createCookie('vid_cookies',jsonObj,7);
}


//alert(jsonObj);

</script>

这是数组:

["/evercookie-master/yahoo.html", "/evercookie-master/facebook.html", "/evercookie-master/facebook.html", "/evercookie-master/facebook.html"]

1 个答案:

答案 0 :(得分:1)

逻辑不正确。如果您想要仅在数组尚不存在的情况下向数组添加值,则必须在添加之前检查所有元素。

在代码中,只要任何元素不匹配,您就会添加值。当然,情况总是如此,因为n个元素n - 1不匹配。

一种方法是使用Array#every

if (res.every(x => x !== pathname)) {
 // add to array and set cookie
}

或者,您可以将数组转换为Set,始终添加值并设置cookie。 Set会自动重复数据删除值:

var res = new Set(x.split(","));
res.add(pathname);
res = Array.from(res);