Javascript заменяет все повторяющиеся символы в массиве одинаково

1

Я заменяю все символы в массиве случайными буквами/цифрами. Однако дублирующиеся буквы не получают одинаковые значения, которые я хочу.

var rWords = ["all","ball","balloon"];
var word = rWords[Math.floor(Math.random() * rWords.length)];

var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var getPos = function(arr) {
    return Math.floor(Math.random() * arr.length);
}

var arr = word.split('');
for (var i = 0; i < word.length; i++) {
    arr.splice(getPos(arr), 1, letters[getPos(letters)]);
}
word = arr.join('');

Я хочу, чтобы на выходе было что-то вроде:
all = 4xx, ball = Y4xx, balloon = Y4xxRR1

  • 0
    Именно это свойство «повторяющиеся буквы не получают одинаковые значения» помогло привести к падению машины Enigma .
Теги:
arrays

1 ответ

2
Лучший ответ

создайте функцию map которая возвращает уникальный символ для того же ввода (для каждого символа, который мы хотим заменить, мы проверяем, есть ли у нас уже замена для него, хранящегося в _map, если нет, то мы найдем его и используем его и сохраним в _map для будущего использования )

var rWords = ["all","ball","balloon"];

var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

var _map = {}
function map(char) {
    if (_map[char] === undefined) {
        _map[char] = letters[Math.floor(Math.random() * letters.length)]
    }
    return _map[char]
}
var result = rWords.map(function(word) {
    var arr = word.split('');
    for (var i = 0; i < word.length; i++) {
        arr.splice(i, 1, map(arr[i]));
    }
    return arr.join('');
})

console.log(result);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню