【问题标题】:JavaScript: Movement in any direction and of any size in an arrayJavaScript:数组中任意方向和任意大小的移动
【发布时间】:2016-08-29 03:28:56
【问题描述】:

我想创建一个数组访问函数,如股票行情。它可以向任何方向循环移动,直到达到新值。

我是 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);

【问题讨论】:

  • 你打算用循环做什么?我认为我从来不需要它来做任何事情。
  • 请注意,array.lp = (array.length + newPos) % array.length; 在您的三种情况中的任何一种情况下都是一样的。
  • array.push(arr.shift());array.pop(arr.unshift());
  • Halcyon,我有 2 个应用程序,第一个是带有自动收报机磁带的模型图灵机,第二个是播放歌曲(向前和向后)的音乐播放器......这是一个简单的功能,我正在寻找寻求更优雅的解决方案...
  • 哈姆斯,很好,谢谢。删除并简化。

标签: javascript arrays loops oop


【解决方案1】:

使用取模运算符。

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

【讨论】:

  • 很高兴知道 RK。这个解决方案的问题是它没有当前tickertapeloop位置的“记忆”。
  • 这样更好吗?我添加了一个 array.lp 属性来存储磁带的索引。
猜你喜欢
  • 1970-01-01
  • 2020-03-20
  • 2014-07-12
  • 1970-01-01
  • 2021-07-29
  • 2016-11-11
  • 2012-12-04
  • 1970-01-01
  • 2021-01-16
相关资源
最近更新 更多