首页 > 解决方案 > 我尝试使用 fisher-yates shuffle 字符串,但没有奏效

问题描述

我尝试使用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)

标签: javascriptshuffle

解决方案


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


推荐阅读