递归函数中的Javascript怪异行为

问题描述

我编写了一个小算法,用于检查数组标记的元素是否具有相似的坐标(在此示例中,虚拟数据不要太当真)

但是我在变量position上出现了奇怪的行为。如果没有相似的数组元素,则变量将毫无理由地增加

如果运行此代码,您将看到position从2到4的神奇变化,从而导致错误。我不知道为什么。

    let activeArrayPos = 0;
    let hexCoordinates = [];
    let stamps = [
      {vertices:[{x: 5,y: 10},{x: 10,y: 20}]},{vertices:[{x: 15,y: 20},{x: 40,y: 30}]},{vertices:[{x: 35,y: 60},{x: 70,y: 70}]},{vertices:[{x: 30,y: 40},{x: 50,y: 50}]},{vertices:[{x: 25,{x: 60,y: 60}]},{vertices:[{x: 5,{x: 30,y: 40}]},];
    
    function findHexpolyPoints(position) {
      console.log("re call function")
      for (let k = 0; k < stamps.length; ++k) {
        let coordinates = []; 
        console.log("POS: "+position)
        if (k === position) continue;
        if (stamps[position].vertices[0].x === stamps[k].vertices[0].x && stamps[position].vertices[0].y === stamps[k].vertices[0].y) {
          if (hexCoordinates[activeArrayPos]) {
            coordinates = [stamps[k].vertices[1].x,stamps[k].vertices[1].y];
          } else {
            coordinates = [stamps[position].vertices[0].x,stamps[position].vertices[0].y,stamps[k].vertices[1].x,stamps[k].vertices[1].y];
          }
        } else if (stamps[position].vertices[1].x === stamps[k].vertices[1].x && stamps[position].vertices[1].y === stamps[k].vertices[1].y) {
          if (hexCoordinates[activeArrayPos]) {
            coordinates = [stamps[k].vertices[0].x,stamps[k].vertices[0].y];
          } else {
            coordinates = [stamps[position].vertices[1].x,stamps[position].vertices[1].y,stamps[k].vertices[0].x,stamps[k].vertices[0].y];
          }
        } else if (stamps[position].vertices[0].x === stamps[k].vertices[1].x && stamps[position].vertices[0].y === stamps[k].vertices[1].y) {
          if (hexCoordinates[activeArrayPos]) {
            coordinates = [stamps[k].vertices[0].x,stamps[k].vertices[0].y];
          } else {
            coordinates = [stamps[position].vertices[0].x,stamps[k].vertices[0].y];
          }
        } else if (stamps[position].vertices[1].x === stamps[k].vertices[0].x && stamps[position].vertices[1].y === stamps[k].vertices[0].y) {
          if (hexCoordinates[activeArrayPos]) {
            coordinates = [stamps[k].vertices[1].x,stamps[k].vertices[1].y];
          } else {
            coordinates = [stamps[position].vertices[1].x,stamps[k].vertices[1].y];
          }
        }
        if (coordinates.length > 0) {
          stamps.splice(position,1);
          if (hexCoordinates[activeArrayPos]) {
            hexCoordinates[activeArrayPos].push(...coordinates);
            if (hexCoordinates[activeArrayPos].length === 12) {
              activeArrayPos += 1;
              findHexpolyPoints(0);
            }
          } else {
            hexCoordinates.push(coordinates);
          }
          if (k > position) {
            findHexpolyPoints(k - 1);
          } else {
            findHexpolyPoints(k);
          }
        }
      }
    }
    
    
    findHexpolyPoints(0);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)