РЕДАКТИРОВАТЬ - я изменил код для правильного объявления переменных ниже, но, кажется, ничего не изменилось
Я написал код с использованием цикла for, который должен удовлетворять ряду критериев, прежде чем выполнять то, что в нем.Проблема заключается в том, что где-то по пути код застревает внутри одного из циклов, вызывая сбой компьютера.
Я попытался разорвать цикл, но это не помогает.
function compareKeypoints(varifiedKeypoints) {
outer_loop: for (i = 0; i < varifiedKeypoints.length; i++) {
let initialKeypoint = varifiedKeypoints[i];
for (j = 0; j < varifiedKeypoints.length; j++) {
let comparisonKeypoint = varifiedKeypoints[j];
if (initialKeypoint.part != comparisonKeypoint.part) {
if (Math.abs(comparisonKeypoint.position.x - initialKeypoint.position.x) <= 20
&& Math.abs(comparisonKeypoint.position.y - initialKeypoint.position.y) <= 20) {
if (keypointsCompatible(initialKeypoint.part, comparisonKeypoint.part)) {
console.log("Activating part: " + initialKeypoint.part);
console.log("Activated part: " + comparisonKeypoint.part);
let keypointPair = {
point_1: initialKeypoint.part,
point_2: comparisonKeypoint.part
}
console.log("Pushing parts!");
activeParts.push(keypointPair);
console.log("breaking loop!");
break outer_loop;
console.log("Loop NOT broken!!");
}
}
}
}
}
if (activeParts.length > 0) {
console.log(activeParts);
}
}
function keypointsCompatible(keypoint_1, keypoint_2) {
var outcome = true;
if (activeParts.length > 0) {
compatibility_loop: for (i = 0; i < activeParts.length; i++) {
if (Object.values(activeParts[i]).includes(keypoint_1) && Object.values(activeParts[i]).includes(keypoint_2)) {
console.log(keypoint_1 + " and " + keypoint_2 + " are not compatible because they already exist as " + activeParts[i].point_1 + " and " + activeParts[i].point_2 + " respectively");
outcome = false;
break compatibility_loop;
console.log("Compatibility NOT broken!!");
}
}
}
console.log("Compatibility outcome is " + outcome);
return outcome;
}
Предполагается, что код принимает два значения в одном массиве и сравнивает их.Если выполняется ряд условий, в том числе если они находятся на определенном расстоянии друг от друга, они будут помещены во вторичный массив.Если значения уже появляются во вторичном массиве, который, как предполагается, должна определить функция keypointCompatible, цикл должен либо продолжить поиск других кандидатов, либо остановиться перед повторным вызовом.Однако по какой-то причине код застревает в функции keypointCompatible, когда он обнаруживает, что значения уже появились во вторичном массиве, и консоль будет многократно выводить «Совместимость ложна», пока не произойдет сбой браузера.