我尝试对字符串使用 fisher-yates shuffle,但没有用

I tried using a fisher-yates shuffle for strings, but it didn't work

我尝试用 fisher-yates shuffle 打乱字符串,但是虽然它正确地获取了索引和值,但它没有打乱字符串,这是怎么回事?

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)

字符串是不可变的。把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)

字符串是不可变的,您不能改变它们。阅读本文以获取更多信息:

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