javascript - 在固定项目的重复列表中查找第 n 个项目

标签 javascript algorithm

我必须确定数学公式来计算一系列数字中的特定重复位置。数字列表无限重复,我需要找到此列表中每 n 个数字的数字。所以我想在重复的 y 数字列表中找到第 *n* 个项目。

例如,如果我的列表有 7 位数字 (y=7),并且我需要每 5 个项目 (n=5),我如何找到该项目? 该列表将如下所示(为了便于查看,我将其分为五组):

12345 67123 45671 23456 71234 56712 34567

我需要在第一个分组中找到数字 5,然后在第二个分组中找到数字 3,然后从第三组中找到 1,然后是 6,然后是 4,然后是 2,然后是 7。

这需要适用于 yn 的任何数字。我通常使用模数来查找第 *n* 个项目,但仅当列表数量不断增加且不重置时才有效。

我正在尝试在 Javascript 或 JQuery 中执行此操作,因为这是一个基于浏览器的问题,但我不太懂数学,所以我正在努力解决它。

谢谢!


编辑:我正在寻找一个理想的数学解决方案,但我会更多地解释这个问题,但这可能只会增加困惑。我有一个轮播安排中的项目列表。在我的示例中,有 7 个唯一的项目(可以是任何数字),但实际列表实际上是该大小的五倍(与上面的 5 个组无关),并且我创建了四组重复项。

为了产生滚动到无限远的错觉,列表位置在“最后”页面上重置(此示例中有两页,因为项目 1-7 跨越 5 项目宽的视口(viewport))。上面的组代表页面,因为在我的示例中每页有 5 个项目。重复项提供了填充移动到下一页项目时可能出现的任何空白所需的填充(例如,第 2 页以 6 和 7 开头,但如果不是重复的 1,2 和 则该页将为空) 3)。当页面越过最后一页时(因此,如果我们尝试转到第 3 页),我会将它们重新定位到列表中的第一页,但会偏移,这样看起来它们仍然会永远前进。

这就是为什么我不能使用数组索引以及为什么拥有数学解决方案会很有用。我意识到有一些旋转木马可以完成与我想要实现的任务类似的任务,但我必须使用我拥有的旋转木马!

最佳答案

每 5 个字符循环一次,如下所示:

var data = "12345671234567123456712345671234567";
var results = [];

for(var i = 4; i < data.length; i += 5){
    results.push(data[i]);
}

//results = [5, 3, 1, 6, 4, 2, 7]

如果您想使用变量x = 5;,那么您的for循环将如下所示:

for(var i = x - 1; i < data.length; i += x){...

无需知道y

关于javascript - 在固定项目的重复列表中查找第 n 个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302458/

相关文章:

javascript - PHP 文本在 AJAX 调用时未进入文本区域

javascript - 为什么 vue.js 不使用 moment.js 使用 datepicker 更新 dom

javascript - 更新的 Angular 版本导致 ngMessages 出现错误

algorithm - 深度优先搜索与广度优先搜索

python - 如何添加元组

algorithm - 傅里叶除法算法背后的逻辑是什么?

c# - 如何使用 C# 使用 Selenium WebDriver 向下滚动?

javascript - jQuery 选择器 - 选中并且类开始于

algorithm - 如何以最短的方式连接所有连接的组件

algorithm - 带循环的递归函数的时间复杂度