【问题标题】:How to loop through arrays starting at different index while still looping through entire array?如何循环遍历从不同索引开始的数组,同时仍然循环遍历整个数组?
【发布时间】:2015-02-10 11:18:48
【问题描述】:

假设我有一个包含 5 个字符串的数组。如何在索引 3 处开始 for 循环并在索引 2 处四处走动?举个例子吧。

var myArry = ["cool", "gnarly", "rad", "farout", "awesome"];

希望从索引 3(“farout”)开始循环到数组末尾(“awesome”),然后在索引 0 到索引 2 处继续循环。基本上从某个点开始一个数组(索引 0 除外)和仍然命中数组中的每个元素。

【问题讨论】:

  • 是的,我知道,我需要一个 For 循环,是的,我知道如何做一个 For 循环,我只是不知道如何以我的问题的方式设置它问
  • 请问您为什么要这样做? - 如果你要点击数组中的每个元素 - 为什么这很重要?
  • 嗯,我有一个二十一点游戏,我正在为休闲而工作。我需要能够做到这一点,这样我才能替换重复的卡片。我将重复值存储在一个数组中,然后我需要遍历它们。由于数组是动态的,有时我必须从索引 3 或 4 或 1 或其他开始。感谢询问

标签: javascript


【解决方案1】:

一种方法是像往常一样使用索引循环遍历数组,并使用带偏移量的模运算符来获取指向数组中正确位置的指针:

var myArry = ["cool", "gnarly", "rad", "farout", "awesome"];
var offset = 3;
for( var i=0; i < myArry.length; i++) {
    var pointer = (i + offset) % myArry.length;
    console.log(myArry[pointer]);
}

因此,您的循环是通过每个元素的标准循环。您获取当前位置,加上偏移量,然后得到除以数组大小的余数。直到您到达与 i + 偏移量相同的数组末尾。当你到达数组的末尾时,余数将为零,然后从那里开始。

Here's a fiddle.

【讨论】:

  • OP 问题的偏移量应为 3。
  • 谢谢,就像一个魅力。我知道如何使用一系列 || 来做到这一点在一个if中,但这看起来不太好并且不能模块化。您的解决方案效果很好。在 Google 上找不到任何关于此的内容。谢谢
  • 这是我需要的算法,可以完美地为可以在水平方向变化的堆叠 UI 面板设置动画,谢谢!
【解决方案2】:

这是你需要的:

var start = 3;
for(var z=0;z<myArry.length;++z) {
  var idx = (z+start) % myArry.length;
  console.log(myArry[idx]);
}

【讨论】:

  • 根本没想过要使用模数。工作正常。
【解决方案3】:
var startAt = 3;
for(var index = 0;index<myArry.length;index++){
  console.log(myArry[startAt]);
  if(startAt==myArry.length-1){
        startAt = -1;
  } 
  startAt++;
}

【讨论】:

  • jsbench 显示接受的解决方案比这个答案慢 73.09%
猜你喜欢
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2019-07-10
  • 2016-05-31
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多