Я пытался использовать shuffle Фишера-Йейтса для строк, но это не сработало - PullRequest
0 голосов
/ 24 сентября 2019

Я пытался перетасовать строку с помощью шаффла Фишера-Йейтса, но, хотя он правильно получает индексы и значения, он не перемешивает строку, что не так?

globalVar = 'I am GLOBAL'

function scrambler(anyString) {
  let placeHolder = anyString
  for (let i = placeHolder.length - 1; i >= 0; i--) {
    let swapIndex = Math.floor(Math.random() * (i + 1))
    let chartoSwap = placeHolder[swapIndex]
    let currentChar = placeHolder[i]
    placeHolder[i] = chartoSwap
    placeHolder[swapIndex] = currentChar
  }
  return placeHolder
}

let scrambled = scrambler(globalVar)
console.log(scrambled)

Ответы [ 2 ]

4 голосов
/ 24 сентября 2019

строк являются неизменяемыми.Измените placeHolder на массив

globalVar = 'I am GLOBAL'

function scrambler(anyString) {
  let placeHolder = anyString.split("")
  for (let i = placeHolder.length - 1; i >= 0; i--) {
    let swapIndex = Math.floor(Math.random() * (i + 1))
    let chartoSwap = placeHolder[swapIndex]
    let currentChar = placeHolder[i]
    placeHolder[i] = chartoSwap
    placeHolder[swapIndex] = currentChar
  }
  return placeHolder.join("")
}

let scrambled = scrambler(globalVar)
console.log(scrambled)
1 голос
/ 24 сентября 2019

Строки являются неизменными, и вы не можете изменить их.Прочитайте это для получения дополнительной информации: https://stackoverflow.com/a/1431113/1128441

String.prototype.replaceAt=function(index, replacement) {
  return this.substr(0, index) + replacement+ this.substr(index + replacement.length);
}
...