JavaScript循环:返回1到10,然后再次(重新启动循环)



上下文:我正在根据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.
        }
    }
}

据我所知,我到处都在搜索,并尝试了几种不同的事情,也是更复杂的潜在解决方案,但基本问题仍然相同,这就是为什么我的问题和我发布的代码版本是指我需要的。也许有更多知识和经验的人可以阐明这一点。预先感谢!

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

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

i = (i + 1)%g_iMaxSearchQueries

或在其他部分中,如果部分设置为0。

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

最新更新