функция в p5.js сбой браузера

#javascript #p5.js

#javascript #p5.js

Вопрос:

Я пытаюсь написать некоторый код для интерпретации языка кодирования в файле .txt. Я написал функцию для предварительного форматирования кода, но при попытке использовать функцию происходит сбой вкладки, вот функция:

 function preformat(code){ 
  chars = split(code, '');  //splits code into individual characters

  for(let i = 0; i < chars.length; i  ){  //loops through all characters
    
    let char = chars[i];   // current character
    let nextChar = chars[i   1]; // next character
    

    if(char === ' ' amp;amp; nextChar == ' '){   
      chars.splice(i, 1);
      i--;

    } else if(char !== ' ' amp;amp; nextChar === " " || "-" || "*" || '/' || "**"){ 
        chars.splice(i, 0, ' ');
    } else if(char === " " || "-" || "*" || '/' || "**" amp;amp; nextChar !== " "){
        chars.splice(i, 0, ' ');
    } 
    // add whitespace beside operators
  }
  
  let val = '';
  for(let i = 0; i < chars.length; i  ){
    val  = chars[i];
  }
  // turn back into a string
  
  return val;
}
 

запуск этой preformat() функции приводит к сбою программы, я сделал практически все, что мог придумать.

PS Я использую p5.js веб — редактор

Ответ №1:

Проблема в том, что вы сталкиваетесь с бесконечным циклом 14 и 16, поскольку эти else ifs всегда оцениваются как true и продолжают вставлять новые элементы в массив. Из-за этого в конечном итоге на странице заканчивается память и происходит сбой. Приведенное ниже должно работать нормально:

 function preformat(code){ 
  chars = code.split('');  //splits code into individual characters

  for(let i = 0; i < chars.length; i  ){  //loops through all characters
    
    let char = chars[i];   // current character
    let nextChar = chars[i   1]; // next character
    

    if(char === ' ' amp;amp; nextChar == ' '){   
      chars.splice(i, 1);
      i--;

    } else if(char !== ' ' amp;amp; (nextChar === ' ' || nextChar === '-' || nextChar === '*' || nextChar === '/')){ 
        chars.splice(i, 0, ' ');
    } else if((char === ' ' || char === '-' || char === '*' || char ==='/') amp;amp; nextChar !== ' '){
        chars.splice(i, 0, ' ');
    } 
    // add whitespace beside operators
  }
  
  let val = '';
  for(let i = 0; i < chars.length; i  ){
    val  = chars[i];
  }
  // turn back into a string
  
  return val;
}

console.log(preformat("text text")); 

Я также обновил проверки if, поскольку некоторые значения оцениваются как false независимо от того, что (сравнение строки длиной один со строкой длиной два).