2017-02-05 3 views
-1

У меня есть простой скриптПоказать сообщение, если значение массива желательно

var NumberOfWords = 2 

var words = new BuildArray(NumberOfWords) 

words[1] = "word 1" 
words[2] = "word 2" 

function BuildArray(size) { 
    this.length = size 
    for (var i = 1; i <= size; i++) { 
    this[i] = null 
    } 
    return this 
} 

function PickRandomWord(frm) { 
    var rnd = Math.ceil(Math.random() * NumberOfWords) 
    frm.WordBox.value = words[rnd] 
} 

Я стараюсь, чтобы отобразить сообщение (не оповещать), если случайное слово «слово 2».
Я не могу понять, какой вар я бы использовал


function myFunction(?var?) { 
    if (?var? = 8) { 
    return "You have" + ?var?; 
    } 
} 
document.getElementById("demo").innerHTML = myFunction("John"); 
+0

использование 'console.log' – orvi

+0

Что делает верхний код нужно сделать с нижний код 'myFunction'? –

+0

верхний код генерирует [число] слова из массива, это слово отображается в textarea – Tarasovych

ответ

1

С вашего вопроса немного сложно сказать, что вы пытаетесь сделать. Мое лучшее предположение заключается в том, что вы выбираете случайное слово из списка, например. из списка имен. Затем вы потенциально показываете специальное сообщение, если это случайное слово/имя совпадает с вашим «секретным» выбором. Если это правильно, я изменил код, чтобы выполнить это, как показано ниже. Просто продолжайте работать несколько раз, пока не появится «Джон».

var words = ["Bill", "Amrita", "John", "Ahmed", "Mary Jane"]; 
 
var numberOfWords = words.length; 
 

 
function pickRandomWord() { 
 
    var rnd = Math.floor(Math.random() * numberOfWords); 
 
    return words[rnd]; 
 
} 
 

 
function myFunction(name) { 
 
    if (name === words[2]) { 
 
    return "You have " + name; 
 
    } 
 
    return "(no message)"; 
 
} 
 

 
var randomName = pickRandomWord(); 
 
console.log("The random name chosen is: ", randomName); 
 
console.log("The special message is:", myFunction(randomName));
<div id="demo"> 
 
</div>

+0

вы поняли меня правильно, спасибо – Tarasovych

0

Не делайте этого, это не создает массив вообще.

function BuildArray(size) { 
    this.length = size 
    for (var i = 1; i <= size; i++) { 
    this[i] = null 
    } 
    return this 
} 

Вместо этого вызовите конструктор массива.

var words = new Array(numberOfWords); 

Или еще лучше, просто создайте новый массив и нажмите на него.

var words = []; 
words.push("word 1"); 
words.push("word 2"); 

Массивы также не имеют их длина закодированы, поэтому Theres нет необходимости держать вокруг переменной для количества слов.

function pickRandomWord() { 
    var index = Math.floor(Math.random() * words.length); 
    wordBox.value = words[index]; 
} 
+0

'Math.ceil' - плохой выбор. Вместо этого следует использовать Math.floor. 'Math.ceil' никогда не вернется 0 в этом случае – webdeb

0

Ваш код не делает то, что вы думаете. Он создает объект, а не массив.

Кроме того, понимает, что индексы массива начинают отсчет от 0, в то время как длина начинает отсчет с 1

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

Наконец, на самом деле нет необходимости в вашей функции buildArray, так как вы можете создавать массивы (и автоматически рассчитывать их размер/длину) гораздо проще.

Однако, если вы должны были сделать эту функцию, это то, что он должен выглядеть следующим образом:

function buildArray(size){ 
 
    
 
    // Create new, empty array 
 
    var result = []; 
 
    
 
    // Se the size of the array to the size passed in 
 
    // As stated, this is not really needed since arrays calculate 
 
    // their length automatically. 
 
    result.length = size; 
 
    
 
    // Return new, empty array 
 
    return result 
 
} 
 

 
// Use the function, don't instantiate it, just call it 
 
var NumberOfWords = 2; 
 
var words = buildArray(NumberOfWords); 
 

 
// Populate the array, indexes start from 0, length starts from 1 
 
words[0] = "word 1"; 
 
words[1] = "word 2"; 
 

 
// NOTE: All of the above code could really just be replaced by: 
 
//var words = ["word 1", "word 2"]; 
 

 

 
// Get random word from the array and display in the textarea: 
 
function pickRandomWord(frm) { 
 
    // Get random number between 0 and the largest index used in the array 
 
    // You should be rounding down here (so that 0 is a possibility) 
 
    var rnd = Math.floor(Math.random() * NumberOfWords); 
 
    document.querySelector("textarea").value = words[rnd]; 
 
} 
 

 
// Set up button to call the function 
 
document.querySelector("button").addEventListener("click", pickRandomWord);
<form> 
 
    <textarea></textarea> 
 
    <button>Get random array element</button> 
 
</form>

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