如何获取循环内数组值的位置信息

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 的回答对我有用。

以上是关于如何获取循环内数组值的位置信息的主要内容,如果未能解决你的问题,请参考以下文章

在没有循环的数组中获取 N 位置的元素

如何迭代数组的数组

如何从数组中获取信息到消息中?

当我只想获取字典中的特定值时,如何解码字典值的 JSON 数组?

如何从给定数组的范围查询中获取给定值的最小异或值

ActionScript 3.0 - 获取数组中相同值的计数