javascript 数组如何从中间开始循环,并使其在开始之前的元素处结束?

2fjabf4q  于 2023-09-29  发布在  Java
关注(0)|答案(2)|浏览(77)

新来的!我想从今天开始循环(例如:“Thursday”),然后在“Wednesday”停止循环.任何帮助是赞赏!谢谢

let days = [
      "Sunday",
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
    ];
    let date = new Date();
    let today = date.getDay();
    let result = [];
    

    for (let i = today; i < days.length; i++) {
      result.push(days[i]);
    }

    return result[index];
  };```
mu0hgdu0

mu0hgdu01#

为简单起见,可以从today循环到days.length,然后再从0循环到today

let days = [
      "Sunday",
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
    ];
    let date = new Date();
    let today = date.getDay();
    let result = [];
    

    for (let i = today; i < days.length; i++) {
      result.push(days[i]);
    }
    for (let i = 0; i < today; i++) {
      result.push(days[i]);
    }

    console.log(result);
41zrol4v

41zrol4v2#

我来是因为我也有同样的问题。感谢上帝,我刚刚发现了一个可以在一个for循环中完成的解决方案。它是如此简单,我很惊讶我花了这么长时间思考它。😅

解决方案

const array = [...Array(10)].map((_,i) => i); // Create an array with values from 0 to 9
const start = 4;

for (let i = start; i < array.length + start; i++) {
  console.log("Value: ", array[i % array.length]);
}

说明

如果你已经理解了上面的解决方案,那么你不需要继续阅读。但是如果上面的解决方案看起来有点混乱/奇怪,那么希望这个解释能帮助你。
以下代码可用于从开始到结束循环元素:

for (let i = 0; i < array.length; i++) {
  console.log("Value: ", array[i]);
}

如果我们使用remainder operator(也称为模运算符)索引数组,也可以得到相同的结果。

for (let i = 0; i < array.length; i++) {
  console.log("Value: ", array[i % array.length]);
}

这是因为对于任何整数被除数N,除以一个 * 更大 * 的整数除数M,余数将 * 总是 * 是N。例如,4/7的余数总是4。同样,0/7的余数将始终为0。因此,尽管我们在循环中引入了remainder运算符,但没有任何变化。
现在,由于数学的原理,余数永远不会大于除数。对于整数除数M,余数R只能在0到M - 1的范围内。见下表:
| 操作|其余部分|
| --|--|
| 0 / 3| 0 |
| 三分之一| 1 |
| 三分之二| 2 |
| 三分之三| 0 |
| 4 / 3| 1 |
| 5 / 3| 2 |
| 6 / 3| 0 |
这里,除数是3。当我们递增被除数时,余数从0循环到3 - 1。这是一种数学现象,我们可以用它来从任何一个起点循环一个数组。
如果可以使用下面的语句从开始到结束遍历数组:

for (let i = 0; i < array.length; i++) {
  console.log("Value: ", array[i % array.length]);
}

然后--因为当被除数(在我们的例子中,索引i)足够大时,remainder运算符会“循环”回0--我们也可以使用下面的语句来开始 * 数组中的任何地方 *,并继续直到到达前一项:

for (let i = start; i < array.length + start; i++) {
  console.log("Value: ", array[i % array.length]);
}

我们所要做的就是移动循环的起点。remainder操作符负责其余部分。希望这对你有帮助。

相关问题