Find array index on a 1d array from a 2d grid javascript - Stack Overflow

Let's suppose I have the following grid and each cell of the grid has an index mapped to a 1d arra

Let's suppose I have the following grid and each cell of the grid has an index mapped to a 1d array.

0, 1, 2
3, 4, 5,
6, 7, 8

I could represent this with a 1d array like: [0, 1, 2, 3, 4, 5, 6, 7, 8]

I would like to know a simple way to map a 2d coordinate like (3,1) to its index in the array, in this case, would be 2.

After researching a lot, I found a lot of people suggesting this equation: index = x + (y * width), but it doesn't seem to work in my tests.

For example for (1, 1), the result would be index = 1 + (1 * 3) = 4, and for (3, 1) would be index = 3 + (1 * 3) = 6, which does not make any sense to me.

Is it possible to achieve this in a simple way? Or I would need to use iterators like a for?

Let's suppose I have the following grid and each cell of the grid has an index mapped to a 1d array.

0, 1, 2
3, 4, 5,
6, 7, 8

I could represent this with a 1d array like: [0, 1, 2, 3, 4, 5, 6, 7, 8]

I would like to know a simple way to map a 2d coordinate like (3,1) to its index in the array, in this case, would be 2.

After researching a lot, I found a lot of people suggesting this equation: index = x + (y * width), but it doesn't seem to work in my tests.

For example for (1, 1), the result would be index = 1 + (1 * 3) = 4, and for (3, 1) would be index = 3 + (1 * 3) = 6, which does not make any sense to me.

Is it possible to achieve this in a simple way? Or I would need to use iterators like a for?

Share Improve this question asked Aug 13, 2019 at 11:44 and-kand-k 6071 gold badge9 silver badges16 bronze badges 3
  • 2 Do you know that index in js starts with 0? – barbsan Commented Aug 13, 2019 at 11:49
  • 2 2D matrix notation is monly (row, col), with indexes starting at 0. Thus, (3, 1) is invalid (only 3 rows, from 0 to 2). If you start the index at 1, it would be (3, 1) = 6, 3rd row, 1rst column. – Derlin Commented Aug 13, 2019 at 11:49
  • 3 you should be using index = x-1 + (y -1* width) – arizafar Commented Aug 13, 2019 at 11:51
Add a ment  | 

3 Answers 3

Reset to default 5

2D matrix notation is monly (row, col), with indexes starting at 0.

Thus, (3, 1) is invalid: only 3 rows, from 0 to 2. (1, 1) means 2nd row, 2nd colum, which is 4 in your example. The formula is thus:

(row * width) + col
(2, 1) = 2*3+1 = index 7

once again using 0 for the first row/col.

If you really want to keep thinking with indexes starting at one, just change the formula to:

((row - 1) * width) + (col - 1) = 1D index 

In your case it would be index = (x - 1) + ((y - 1) * width) as your coordinate system starts from 1 and arrays start from 0.

let arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];

function getPosition(x, y, width) {
  return x - 1 + (y - 1) * width;
}

console.log({
  position: getPosition(3, 1, 3),
  element: arr[getPosition(3, 1, 3)]
});

It is indeed index = x + y * width (the parens are unnecessary) or index = y + x * width, depending on whether you want your flat array to keep the rows together as in your question ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], index = x + y * width), or keep columns together ([0, 3, 6, 1, 4, 7, 2, 5, 8], index = y + x * width). But indexes usually start at 0, not 1. So your (1, 1) would be (0, 0) and your (3, 1) would be (2, 0).

Here's the first:

// 0, 1, 2
// 3, 4, 5
// 6, 7, 8
const a = [0, 1, 2, 3, 4, 5, 6, 7, 8];
let x = 0, y = 1;
let index = x + y * 3;
console.log(`(${x}, ${y}) is index ${index}, value ${a[index]}`);
x = 2;
y = 0;
index = x + y * 3;
console.log(`(${x}, ${y}) is index ${index}, value ${a[index]}`);

Here's the second:

// 0, 1, 2
// 3, 4, 5
// 6, 7, 8
const a = [0, 3, 6, 1, 4, 7, 2, 5, 8];
let x = 0, y = 1;
let index = y + x * 3;
console.log(`(${x}, ${y}) is index ${index}, value ${a[index]}`);
x = 2;
y = 0;
index = y + x * 3;
console.log(`(${x}, ${y}) is index ${index}, value ${a[index]}`);

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745383900a4625355.html

相关推荐

  • Find array index on a 1d array from a 2d grid javascript - Stack Overflow

    Let's suppose I have the following grid and each cell of the grid has an index mapped to a 1d arra

    8小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信