2015-03-16 3 views
-1

Мне нужно заменить подчеркивание в одной заданной позиции буквой. Я создал функцию, чтобы заменить ее в определенном месте, но я не уверен, ссылаюсь ли я, или если это будет работать.Замена подчеркивания в определенном месте для буквы javascript

function replaceAt(str,index,chr) { 
     if(index = -1) { 
      str = str; 
     } else { 
     str = str.substr(0,index) + chr + str.substr(index+1); 
     } 
    } 
underscore = replaceAt(underscore, word.indexOf(letter * 2), letter); 

Это то, что я использую в данный момент времени, но оно говорит, что оно не определено. Есть идеи? Полный код ниже.

Спасибо заранее, я новичок в этом, поэтому любая помощь очень ценится.

Editted

код теперь выглядит как приведенный ниже код и фрагмент был Editted текущего кода. Все еще не печатайте буквы, в которых я нуждаюсь в них.

function replaceAt(str,index,chr) { 
     if(index != -1) { 
      str = str.substr(0,index) + chr + str.substr(index+1); 
     } 
     return str; 
    } 
underscore = replaceAt(underscore, word.indexOf(letter * 2), letter); 

/* Hangman Game CSS File */ 
 
body 
 
{ 
 
\t background-color: #1B264F; 
 
} 
 

 
#main { 
 
\t background-color: #5386E4; 
 
\t height: 97vh; 
 
    \t width: 95vw; 
 
    \t vertical-align: middle; 
 

 
} 
 
canvas { 
 
    padding-left: 0; 
 
    padding-right: 0; 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    display: block; 
 
    margin-top: auto; 
 
    margin-bottom: auto; 
 
} 
 

 
/* colour scheme hex 
 

 
lightest blue: #5386E4; 
 
middle blue: #274690; 
 
darkest blue: #1B264F; 
 
black color: #070707; 
 
white color: #E2E2E3; 
 

 
*/
<!DOCTYPE html> 
 
<html> 
 
\t <head> 
 
\t \t <title>Hangman by Lachlan Teale</title> \t 
 
\t \t <meta name="description" content="Lachlan Teale's Hangman Game 2015"> 
 
\t \t <meta name="keywords" content="hangman, lachlan, teale, Javascript"> 
 
\t \t <meta charset="UTF-8"> 
 
\t \t <meta name="author" content="Lachlan Teale"> 
 
\t \t <link rel="stylesheet" type="text/css" href="style.css"> 
 
\t </head> 
 
\t <body> 
 
\t <canvas id="main" width="1920" height="1080" style="border:1px solid #d3d3d3;"></canvas> 
 

 
\t <script type="text/javascript"> 
 

 
\t //setting variables 
 
\t \t var canvas = document.getElementById('main'); 
 
     \t var context = canvas.getContext('2d'); 
 
     \t var underscore = ""; 
 
     \t var letter; 
 
     \t var complete = false; 
 

 
\t //list of words 
 
\t \t var wordList = ["apple", "peach", "pear", "mango", "banana", "paper", "pens", "laptop", "desk", "chair", "star", "sky", "moon", "sun", "planets"]; 
 

 
\t //picking a random word from the list 
 
\t \t var word = wordList[Math.floor(Math.random() * wordList.length)]; 
 

 
\t //print out the underscores for the number of letters 
 
\t \t for (i = 0; i < word.length; i++) \t { 
 
\t \t \t var underscore = underscore + "_ "; 
 
\t \t } 
 

 
\t \t context.font = '50pt Calibri'; 
 
     \t context.textAlign = 'center'; 
 
     \t context.fillStyle = '#E2E2E3'; 
 
     \t context.fillText(underscore, canvas.width * 0.5, canvas.height * 0.70); 
 

 
    //correct letter text 
 
     \t context.font = 'bold 30pt Calibri'; 
 
     \t context.textAlign = 'center'; 
 
     \t context.fillStyle = '#E2E2E3'; 
 
     \t context.text 
 
     \t context.fillText("Correct Letters", canvas.width * 0.08, canvas.height * 0.05); 
 

 
    //Wrong Letter text 
 
     \t context.font = 'bold 30pt Calibri'; 
 
     \t context.textAlign = 'center'; 
 
     \t context.fillStyle = '#E2E2E3'; 
 
     \t context.text 
 
     \t context.fillText("Wrong Letters", canvas.width - (canvas.width * 0.08), canvas.height * 0.05); 
 

 
\t //checking which button is pressed 
 
\t \t window.addEventListener('keydown', function(event) { 
 
\t \t \t if (event.keyCode >= 65 && event.keyCode <= 90) { 
 
    \t \t \t context.clearRect(0, canvas.height * 0.80, canvas.width, canvas.height); 
 
     \t \t letter = String.fromCharCode(event.keyCode).toLowerCase(); 
 
     \t \t context.font = '50pt Calibri'; 
 
     \t \t \t context.textAlign = 'center'; 
 
     \t \t \t context.fillStyle = '#E2E2E3'; 
 
     \t \t \t context.fillText(letter, canvas.width * 0.5, canvas.height * 0.85); 
 
     \t \t } 
 
\t \t }); 
 

 
\t //checking if back key is pressed 
 
\t \t document.addEventListener('keydown', function(event) {      
 
    \t \t if (event.keyCode == 8) { \t \t \t \t \t \t \t \t \t \t \t  
 
    \t \t \t context.clearRect(0, canvas.height * 0.80, canvas.width, canvas.height); 
 
    \t \t } 
 
    \t }); 
 

 
\t //function for replacing letter 
 
\t \t function replaceAt(str,index,chr) { 
 
    \t \t if(index != -1) { 
 
    \t \t \t str = str.substr(0,index) + chr + str.substr(index+1); 
 
\t \t \t } 
 
\t \t \t return str; 
 
\t \t } 
 

 
\t //checking if enter is pressed 
 
     \t document.addEventListener('keydown', function(event) {      
 
    \t \t if(event.keyCode == 13) { 
 

 
    //checking if letter is in the word 
 
    \t \t \t alert(word); 
 

 
\t \t \t \t alert(underscore + " " + letter + " " + word.indexOf(letter)); 
 

 
\t \t \t \t underscore = replaceAt(underscore, word.indexOf(letter * 2), letter); 
 

 
\t \t \t \t context.clearRect(canvas.width * 0.4, canvas.height * 0.3, canvas.width *0.7, canvas.height * 70); 
 
    \t \t \t context.font = '50pt Calibri'; 
 
     \t \t \t context.textAlign = 'center'; 
 
     \t \t \t context.fillStyle = '#E2E2E3'; 
 
     \t \t \t context.fillText(underscore, canvas.width * 0.5, canvas.height * 0.70); 
 

 
     \t \t \t 
 
\t \t \t } 
 
    \t }); 
 

 
\t \t 
 
\t \t </script> 
 
\t </body> 
 
</html>

ответ

0

Есть несколько проблем с функцией.

  1. Вы используете = вместо == или ===. = выполняет присвоение, а не сравнение.

  2. Вы никогда не возвращаете ничего из функции.

Так исправляя оба эти:

function replaceAt(str,index,chr) { 
    if (index == -1) { 
     str = str; 
    } else { 
     str = str.substr(0,index) + chr + str.substr(index+1); 
    } 
    return str; 
} 

Но нам не нужна первая часть, что на всех, так:

function replaceAt(str,index,chr) { 
    if (index != -1) { 
     str = str.substr(0,index) + chr + str.substr(index+1); 
    } 
    return str; 
} 

Использование:

var str = "this is_a test"; 
var index = str.indexOf("_"); 
str = replaceAt(str, index, "|"); 
console.log(str); // "this is|a test" 

Стоит отметить, что строки имеют replace метод, а также, который заменит первое вхождение подстроки:

var str = "this is_a test"; 
str = str.replace("_", "|"); 
console.log(str); // "this is|a test" 

Или все случаи, если вы используете регулярное выражение с g флагом:

var str = "this is_a test_with two underscores"; 
str = str.replace(/_/g, "|"); 
console.log(str); // "this is|a test|with two underscores" 
+0

Могу ли я спросить, что окончательное «возвращение str "делает? – MrTeale

+0

@MrTeale: Это определяет возвращаемое значение функции. Присвоение 'str' внутри функции просто изменяет свое значение внутри функции, оно ничего не делает для строки, которую вы передали в функцию. –

+0

Он не будет записывать вывод на мой холст. Я точно установил функцию точно так же, как вы это делали, а затем просто ссылался на переменную подчеркивания и ничего не получал – MrTeale

Смежные вопросы