基于数组批量替换字符串中带$前缀的指定单词时replaceAll不生效的问题求助
解决replaceAll不执行替换的问题
我来帮你排查下问题所在,其实核心有两个关键点:
1. JavaScript字符串是不可变的
replaceAll方法不会修改原字符串,它会返回一个新的字符串。你现在的代码只是调用了replaceAll但没有把返回的新字符串重新赋值给string变量,所以原字符串完全没变化。
2. 循环中要基于更新后的字符串继续替换
你当前的循环每次都用最初的string去执行替换,而不是上一次替换后的结果,这也会导致最终没有任何有效替换。
修正后的代码
把string改成let声明(因为要重新赋值),然后每次替换后把结果存回string:
const myPrefix = 'prefix' const array = ['status', 'id', 'offset', 'limit']; // 用let声明,因为需要重新赋值 let string = '($status: CardStatus, $id: ID, $offset: Int, $limit: Int), (status: $status, id: $id, offset: $offset, limit: $limit)'; array.forEach((i) => { // 将替换后的新字符串重新赋值给string string = string.replaceAll(`$${i}:`, `$${myPrefix}_${i}:`) }) console.log(string);
执行这段代码后,你会看到所有目标变量都被正确替换成$prefix_status:、$prefix_id:这样的格式。
为什么写死参数能工作?
你之前写死'$status:'能生效,大概率是你当时不小心把replaceAll的返回值赋值给了某个变量,而这次循环里漏掉了这个关键步骤——和replaceAll是否接受变量作为参数无关,它完全支持变量作为第一个参数哦。
内容的提问来源于stack exchange,提问作者Ari Shojaei
相关产品推荐
相关产品推荐

