如何获取循环内数组值的位置信息
Posted
技术标签:
【中文标题】如何获取循环内数组值的位置信息【英文标题】:How to get the position information of a value of an array inside loop 【发布时间】:2021-03-01 21:58:15 【问题描述】:我需要获取循环内数组的位置信息。
我有两个变量。
var columns = 4,
rows = 5;
因此,根据 i 的值(循环中),数组将如下所示:
现在,我要生成一个信息数组。
var positions = [],
totalCount = columns * rows;
for (var i = 1; i <= totalCount; i++)
var informationObject =
"column": "column number",
"row": "row number",
"column_count": "column count",
"row_count": "row count",
;
positions.push(informationObject);
console.log(positions);
这里有详细的架构:
我不想根据位置信息来不同地准备这个positions数组。
你可能会问我尝试了什么。我实际上是在做自定义代码。就像
if(i=7)//do operation
,我的意思是完全人性化的代码。这变得非常奇怪。我认为有办法动态地做到这一点。
请帮忙。提前致谢。
【问题讨论】:
对于从 0 开始的索引,i % 4
依次为:0、1、2、3、0、1、2、3、0、1、2、3、.. ...同样,Math.floor(i / 4)
是 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, ... 。也许这有帮助。
另外,列数和行数可以通过数学方式确定,而不是对i
的每个值的输出进行硬编码
【参考方案1】:
基于i
对输出进行硬编码不是一个可行的解决方案。您要输出的属性值可以通过使用模运算符 (%
) 和除法获得:
var columns = 4,
rows = 5,
positions = [],
totalCount = columns * rows;
for (var i = 0; i < totalCount; i++)
let r = Math.ceil(i / columns);
let c = (i % columns) + 1;
positions.push(
column: c,
row: r,
column_count: r,
row_count: c
);
console.log(positions);
有关更多信息,请参阅以下 MDN 链接:
Modulo operator (%) Math.ceil()【讨论】:
天啊,你真是个天才。这实际上是我需要的。非常感谢:)【参考方案2】:使用两个 for 循环是您想要轻松捕获 x/y 信息的方法。其中 x 代表左/右,y 代表上/下。
这就是你要找的吗?
var columns = 4,
rows = 5;
var positions = [],
for (let x = 1; x <= columns; x++)
for(let y=1;y<=rows;y++)
var informationObject =
"column": x,
"row": y,
"column_count": y,
"row_count": x,
;
positions.push(informationObject);
console.log(positions);
【讨论】:
谢谢。我想要一点不同的东西。 @Rory McCrossan 的回答对我有用。以上是关于如何获取循环内数组值的位置信息的主要内容,如果未能解决你的问题,请参考以下文章