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