【问题标题】:Javascript loop: returning 1 to 10 and then again (restarting loop)Javascript循环:返回1到10,然后再次(重新启动循环)
【发布时间】:2019-07-30 21:07:42
【问题描述】:

上下文:我正在根据w3schools.com 中的教程使用 cookie。这个想法是设置最多 10 个由用户输入的搜索查询给出的 cookie(也就是说,只应存储最后 10 个条目)。

我有一个函数可以为 10 个 cookie 中的每一个生成一个名称(“Search_Entry”+i)。在第 11 个条目之前一切正常,我希望该函数再次返回第一个可能的名称,然后返回第二个、第三个等,因此,以这种方式,已经存储在这些名称下的值将简单地替换为新的一。在某种程度上,我希望循环以某种方式重新启动,尽管这似乎不是一个简单的选择。

var g_iMaxSearchQueries = 10;
function dynamicCookieName() {
    var l_aCurrentCookie;
    for (var i = 0; i < g_iMaxSearchQueries; i++) {
        l_aCurrentCookie = getCookie("Search_Entry"+i);
        if(l_aCurrentCookie == "" && i < g_iMaxSearchQueries) {
            return "Search_Entry"+i;
        } else if (i == 9) { //this “else” needs to be an “else if” in order for the condition to work properly. Maybe is (i == 9) not the right one but the only one that worked for me from what I’ve tried.  
        //here would the loop start running again exactly like in the first part.
        }
    }
}

据我所知,我到处搜索,并尝试了几种不同的东西,还有更复杂的潜在解决方案,但基本问题仍然相同,这就是为什么我的问题和我发布的代码版本指的是核心我需要的。也许有更多知识和经验的人可以对此有所了解。提前非常感谢!

【问题讨论】:

  • i%g_iMaxSearchQueries?
  • &amp;&amp; i &lt; g_iMaxSearchQueries 在当前的 for 循环中是多余的
  • @depperm 感谢您的 cmets,但我不确定您的建议有何想法 (i%g_iMaxSearchQueries)。
  • 您当前的功能(对我来说没有看到上下文)没有意义。但是i%g_iMaxSearchQueries 将确保您永远不会超过最大 cookie。如果i 是 12 将导致 2

标签: javascript loops cookies


【解决方案1】:

g_currCookie%g_iMaxSearchQueries 将确保您的 cookie 密钥名称不超过 9。

这是一个添加最多 10 个 cookie 的小示例:

var my_search = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen']

var g_currCookie = 0;
var g_iMaxSearchQueries = 10;

function addCookie() {
  document.cookie = "Search_Entry" + (g_currCookie%g_iMaxSearchQueries) + "=" + my_search[g_currCookie%my_search.length];
  g_currCookie++;
}

function getCookies() {
  console.log(document.cookie);
}

function resetCookies() {
  for (var i = 0; i < g_iMaxSearchQueries; i++) {
    document.cookie = "Search_Entry" + i + '=;';
  }
}
//From https://www.w3schools.com/js/js_cookies.asp
function getCookie(num) {
  var name = Search_Entry + num + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

jsfiddle

【讨论】:

  • 谢谢!它似乎做我想做的事。我只需要看看我是否可以将它调整到我的项目中。我试图投票给你的答案是有用的,但我的投票还不算数......
  • 您好!您的代码可以解决我原来的问题。问题是,由于在我的项目中,数组是使用用户搜索查询动态生成的,因此每次重新加载页面(即每次单击搜索按钮)时它都会丢失,并且只会导致第一个保存的 cookie被重写。我一直无法找到解决方案,这就是为什么我想知道您或其他人是否可以在这方面提出建议。提前非常感谢!
【解决方案2】:

假设您希望循环连续执行, 条件i++可以改成

i = (i + 1)%g_iMaxSearchQueries

或 在 else if 部分,将 i 设置回 0。

else if(i==9) {
    i = 0
}

【讨论】:

  • 感谢您的回答,但它似乎对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2016-08-27
  • 2017-11-16
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多