确定给定数组索引的组号

问题描述

假设您有一个大小为n的数组,该数组由x组大小为y的项组成。 例如,大小为12的数组由3组4个项目组成。

x*y = n

给出一个项目的索引(i),您将如何确定它属于哪个组(g)?

例如,在上面的数组中,您的索引为6(索引从0开始)。这意味着它是第二组中的第三项,所以g =2。索引8会产生g = 3,因为它是第三组中的第一项。

得出该结果(g)的公式是什么?

解决方法

如果我们有x,y,i和n,则可以使用以下公式计算组号。

计算属于哪个组:y / i。

我假设x,y和i都从0开始。

说明:

我们可以这样写: 假设组是G,k是一些数字。

y * G + k = i; 这使得 G = i-k / y

在这里我们可以忽略k。 最终表达式:G = floor(i / y)

请考虑您的示例。 x = 3,y = 4,i = 6。

G =下限(6/4)= 1。

组数从0开始,因此将成为第二组。

,

这是我的尝试

let ng = 4 // NO. of groups
let gs = 3 // Group Size
let n = ng * gs

let getGroup = (i) => {
  if (n != 0 && i != 0) {
    let mod = i % gs;
    if (mod == 0) {
      return "group " + i / gs + " | " + "position " + gs
    } else {
      return "group " + (((i - mod) / gs) + 1 )+ " | " + "position " + mod
    }
  }
}

console.log(getGroup(11))