javascript - 我尝试使用 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)
解决方案
字符串是不可变的。换成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)
推荐阅读
- swift - 如何使用递归在 Swift Playground 中打印斐波那契数列
- html - 浏览器全屏时的视口高度问题
- jquery - 尽管我使用的是 .each(),为什么 .append() 会多次出现?
- jhipster - 如何在 Jhipster JDL 中为实体属性设置初始值?
- javascript - 隐藏所有具有 ID 的元素
- java - 如果条件超过某个数量的分区(在我的情况下为 30)并且如果分区小于 30,则 Hive 查询抛出语义异常
- matlab - 分组十六进制颜色值
- docker - 如何通过 docker compose 将文件复制到 docker 容器,而不绑定到主机?
- python - 在 Excel 文件中获取指向 PDF 中特定页面的超链接
- python - 熊猫造型:将数字格式导出到 excel