Выбор случайного элемента из массива в JavaScript возвращает весь массив - PullRequest
0 голосов
/ 02 августа 2020

Я пишу программу, которая угадывает ввод, используя JavaScript, и для этого мне нужно выбрать случайный элемент из массива. Однако после попытки отладки с помощью Chrome DevTools я обнаружил, что он возвращает весь массив, а не только элемент. EDIT: я также убедился, что это не имеет ничего общего с методом выбора случайного элемента. Вот код:

        var alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9","~","`","!","@","#","$","%","^","&","*","(",")","-","_","=","+","[","]","{","}","\\","|",";",":","'","\"",",","<",".",">","/","?"," "]
        var charset = [];
        if(document.getElementById("lowercase").checked){
            charset.push(alphabet.slice(0, 26));
        }
        if(document.getElementById("uppercase").checked){
            charset.push(alphabet.slice(26, 52));
        }
        if(document.getElementById("numbers").checked){
            charset.push(alphabet.slice(52, 62));
        }
        if(document.getElementById("special").checked){
            charset.push(alphabet.slice(62, alphabet.length));
        }
        var word = document.getElementById("input").value;
        var foundword = "";
        while(true) {
            for(i = 0; i < word.length; i++) {
                foundword += charset[Math.floor(Math.random() * charset.length)];
            }
            if(word == foundword) {
                alert("done");
                break;
            }
            foundword = "";
        }

Кто-нибудь может помочь? Заранее спасибо!

1 Ответ

2 голосов
/ 02 августа 2020

alphabet.slice возвращает массив.

Когда вы charset.push(alphabet.slice(.......)) нажимаете массив, в конце charset находится массив массивов.

Вы можете использовать оператор распространения - ... - для преобразования переданного массива в серию значений:

charset.push(...alphabet.slice(26, 52));

Чтобы помочь вам привыкнуть к синтаксису, вот еще пара примеров:

let arr = alphabet.slice(26, 52);
charset.push(...arr);

charset.push(...['a', 'b', 'c']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...