JavaScript:在数组中以任何方向和任何大小移动

时间:2016-05-03 21:57:56

标签: 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.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);

1 个答案:

答案 0 :(得分:0)

使用模数运算符。

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