Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何';周期';通过Javascript中关联数组的索引_Javascript_Associative Array - Fatal编程技术网

如何';周期';通过Javascript中关联数组的索引

如何';周期';通过Javascript中关联数组的索引,javascript,associative-array,Javascript,Associative Array,这是一个带有2个或更多项目的切换,其中需要拾取下一个项目,以便依次拾取所有值 这个特定关联数组中的索引是唯一的,它们的数量是可变的(2个或更多),并且没有原型元素。我知道旧索引,我想将新索引设置为找到的下一个索引(如果旧索引恰好是最后一个,则设置为第一个索引) 这就是我想到的,但我想知道是否有更优雅的方式。关联数组是strings,旧索引是oldx: var i, seen_oldx = 0, newx = ""; for (i in strings) { if (se

这是一个带有2个或更多项目的
切换
,其中需要拾取下一个项目,以便依次拾取所有值

这个特定关联数组中的索引是唯一的,它们的数量是可变的(2个或更多),并且没有原型元素。我知道旧索引,我想将新索引设置为找到的下一个索引(如果旧索引恰好是最后一个,则设置为第一个索引)

这就是我想到的,但我想知道是否有更优雅的方式。关联数组是
strings
,旧索引是
oldx

var i, 
    seen_oldx = 0, 
    newx = "";

for (i in strings) {
  if (seen_oldx) {
    newx = i; // index after oldx (not reached if oldx is last)
    break; // found it, stop looking
  }
  else if (i === oldx) 
    seen_oldx = 1;
  else if (!newx) 
    newx = i; // newx is the first (in case oldx is last)
  }
}

看起来您正在描述一个堆栈。因此,您只需根据需要从堆栈中弹出项目,而不需要索引等

这是后进先出

 var stack=[];
 stack.push(1);
 stack.push(2);
 stack.push(3);
然后删除项目

 var result = stack.pop();

这是一个方案,其中包含一个用于数据的数组和一个用于保留最后一个索引的数组
array.index的属性,以及一个用于返回数组的下一个元素的函数

var数组=[“黄色”、“绿色”、“蓝色”、“橙色”],
我
函数getNext(数组){
if(!('index'在数组中)){//测试属性索引是否存在
array.index=-1;//如果不是,则创建一个起始值为-1的数组
}
array.index++;//增量索引
array.index=array.index%array.length;//将索引移动到正确的间隔中
return数组[array.index];//返回元素
}
对于(i=0;i<10;i++){
write(getNext(数组)+'
');
}
如果不添加一点数据结构,似乎没有一个真正优雅的解决方案。最后,我添加了一个包含字符串关联数组所有索引的适当数组:

for (var i in strings) i_strings.push(i);
然后代码就是:

newx = (oldx + 1) % i_strings.length;

“new”在JavaScript中是一个保留字,您不能将其用作变量。请添加
字符串的内容
。例如(但这并不重要,它可以更改,只要至少有2个条目;内容可以是任何对象):strings={a':'a','b':'b','c':'c'}请添加一些示例,虽然对象属性没有“下一个”项的顺序,但解决方法是我的代码计算for in枚举索引的顺序在对象不变时不变。我相当肯定它是可以信赖的,但从规范的角度来看,当然没有保证。一个更长、更麻烦的解决方案可能需要一个所有索引的一次性数组,然后循环使用,将索引的数量乘以它们的数量。这可能更清楚、更清晰。我想的更多的是一个循环列表。但问题是如何在代码中将它优雅地链接到我的关联数组;对于(i in strings)i炣strings[j++]=i;然后代码就是:newx=(oldx+1)%i_strings.length;我不知道你可以“重载”一个包含非正整数索引元素的普通数组,这有时会派上用场。。!我想这就是javascript中所有非原语对象的工作原理,它们可以有两个,也可以有一个。普通数组只是一个具有一些特殊特性的对象。