我想要的是比较当前url和我的cookie数组,它将包含用户访问过的所有URL,所以它会比较数组是否包含当前链接,如果没有,它会将新链接推送到数组,并再次使用包含新推链接的新数组重新创建cookie,所以我现在面临的问题是,每次检查唯一链接的if函数都是真的,我不确定问题是什么?
你们能看一下吗:
<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"]发布于 2017-07-05 19:23:07
逻辑是不正确的。如果只想在数组不存在的情况下才向数组添加值,则必须在添加数组之前检查所有元素。
在您的代码中,只要任何元素不匹配,就会添加该值。当然,情况总是如此,因为在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);https://stackoverflow.com/questions/44934042
复制相似问题