gpt4 book ai didi

javascript - 在数组中向前和向后选择 X 量,如果需要循环到开始和结束

转载 作者:行者123 更新时间:2023-11-29 19:46:17 28 4
gpt4 key购买 nike

我需要在给定数组索引和范围的情况下,在返回新索引的数组中向前循环 X 量并向后循环 X 量。

如果循环向前到达数组的末尾,它将在数组的开头继续。如果循环在向后时到达开头,它会在数组末尾继续。

例如,数组:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

给定索引 8 和范围 3,该函数将返回 [5, 6, 7 ,8, 9, 0, 1]

或者,给定索引 1 和范围 3,它将返回 [8, 9, 0, 1, 2, 3, 4]

我尝试编写一个解决方案,但它只适用于固定范围的数字,而且非常粗糙。只是想知道是否有一种简洁的方法可以实现这一目标。首选 Javascript 解决方案,但如果需要,我很乐意翻译另一种语言的逻辑。

谢谢。

最佳答案

使用模数这很容易:

var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
index = 8,
n = 3;

var result = [];

for (var i = index - n, len = array.length; i <= index + n; i++) {
result.push(array[(i + len) % len]);
}

console.log(result);

编辑 JSFiddle:http://jsfiddle.net/cmymS/

本例中模运算符的解释:

模运算符处理越界。在 for 循环内部,i是数组中的“虚拟”索引,可以小于 0 或 >= len .您可以将其视为在实际数组的左侧和右侧都有无限重复的数组。如果i < 0 ,我们正在访问左侧的虚拟阵列之一,如果 i >= len ,我们正在访问右侧的虚拟阵列之一。索引转换(i + len) % len然后处理将“虚拟”索引转换回实际数组索引。

有两个边界条件和访问“正常”索引的情况:

a) i < 0 :考虑例如i = -3 .

(i + len)会将位置移动一整个数组,以便我们在右侧的虚拟数组中工作,但指向相同的元素。自 len - 3 起模数无效小于 len .

b) i >= len :考虑例如i = len + 4

(i + len)会将数组的位置向右移动。在我们的示例中,(i + len)将是 (len + 4 + len)但是模抵消了这些变化,所以我们得到 4 .

c) i是原始数组中的有效索引 (i + len)将向右移动一个数组的位置,但这由自 0 <= i < len 以来的模数重置. (i + len) % len = i .

关于javascript - 在数组中向前和向后选择 X 量,如果需要循环到开始和结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358382/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com