如何解决递归函数中的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 举报,一经查实,本站将立刻删除。