Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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_Arrays_Loops_Oop - Fatal编程技术网

JavaScript:数组中任意方向、任意大小的移动

JavaScript:数组中任意方向、任意大小的移动,javascript,arrays,loops,oop,Javascript,Arrays,Loops,Oop,我想创建一个数组访问功能,就像一个自动售票机磁带。它可以在任何方向上循环移动,直到到达新值 我是JS的新手。我想出了这个解决办法,但感觉很糟糕。我想知道是否有人有更好的解决办法 var pet = ['dog', 'cat', 'rat', 'horse', 'mouse']; function loop(posChange, array) { if (isNaN(array.lp)) { array.lp = 0; }; var newPos = array.

我想创建一个数组访问功能,就像一个自动售票机磁带。它可以在任何方向上循环移动,直到到达新值

我是JS的新手。我想出了这个解决办法,但感觉很糟糕。我想知道是否有人有更好的解决办法

 var pet = ['dog', 'cat', 'rat', 'horse', 'mouse'];

 function loop(posChange, array) {
   if (isNaN(array.lp)) {
     array.lp = 0;
   };
   var newPos = array.lp + posChange;
     array.lp = (array.length + newPos) % array.length;
   return array[array.lp];
 };

 loop(2, pet);
编辑:(删除多余的if语句)。为了清晰起见,想象一个有5首循环歌曲的音乐播放器。我想前进3首歌,得到结果,再前进2首,然后返回1首。这是最好的方法吗

var song = ['songa', 'songb', 'songc', 'songd', 'songe'];

function loop(posChange, array) {
   if (isNaN(array.lp)) {
     array.lp = 0;
   };
   var newPos = array.lp + posChange;
     array.lp = (array.length + newPos) % array.length;
   return array[array.lp];
 };

 loop(3, song);
 loop(2, song);
 loop(-1, song);

使用模数运算符

function loop (posChange, array) { array.lp = array.lp || 0; array.lp = (array.lp + posChange) % array.length; return array[array.lp]; }

你打算用这个循环做什么?我想我从来都不需要它做任何事情在这三种情况下的任何一种情况下都会起相同的作用。
array.push(arr.shift())
array.pop(arr.unshift())
Halcyon,我有两个应用程序,第一个是带自动售票带的图灵机模型,第二个是一个音乐播放器,可以跳歌曲(向前和向后)。。。这是一个简单的功能,我正在寻找一个更优雅的解决方案…哈姆斯,很好,谢谢你。删除并简化。很高兴了解RK。这个解决方案的问题是它没有当前tickertapeloop位置的“内存”。这样更好吗?我添加了array.lp属性来存储磁带的索引。