Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 修改字符串的索引_Javascript_String - Fatal编程技术网

Javascript 修改字符串的索引

Javascript 修改字符串的索引,javascript,string,Javascript,String,我想知道如何使用运行时替换字符串中的字符(在javascript中) 比如说 let str=“hello world”; str[0]=“n”; console.log(str);//hello world您可以使用.replace(“,”)函数 例: 代码笔示例: 更多信息:在JavaScript中,字符串是不可变的,因此您可以做的最好的事情就是创建一个带有所需更改的新字符串(因此,忘记O(1)),现在我认为最好的方法是使用以下替换函数: constreplaceat=(str,idx,

我想知道如何使用运行时替换字符串中的字符(在javascript中)

比如说

let str=“hello world”;
str[0]=“n”;
console.log(str);//hello world
您可以使用.replace(“,”)函数

例:

代码笔示例:


更多信息:

JavaScript
中,字符串是不可变的,因此您可以做的最好的事情就是创建一个带有所需更改的新字符串(因此,忘记
O(1)
),现在我认为最好的方法是使用以下替换函数:

constreplaceat=(str,idx,char)=>
{
返回str.replace(//g,(匹配,偏移)=>offset==idx?字符:匹配);
}

日志(replaceAt(“Hello”,1,“3”))您可以使用
子字符串

“严格使用”;
常量replaceCharAt=(s,c,i)=>i?(i!=1?c+s子串(i+1):s[0]+c+s子串(3)):c+s子串(i);
让str=“你好,世界”;
str=replaceCharAt(str,“n”,0);
str=替换字符(str,“3”,1);

console.log(str)这不是O(n)时间吗?因为slice返回一个浅拷贝,所以它至少可能是O(1)空间。但是,在我执行
str[5]=“w”
或其他操作的情况下,如果不进行遍历,它如何变为5?切片是O(1)操作吗?在ECMA脚本上,它看起来像O(n):@Iza(出于采访目的),可能没有人会期望您优化字符串操作的性能,因为这在浏览器环境中通常不是一个问题。进入JS面试并开始变异字符串以提高您正在演示的解决方案的性能,可能是取消资格的一个好方法。如果你确实需要这样的东西,你可能会使用数组或typedarrays来表示单个字符。这绝对是公平的。我只是觉得应该有办法做这些事情。当我编写javascript代码时,这使得分析我的运行时变得更加困难,因为我遇到了这样的问题。所以现在,没有办法做到这一点?我也不同意这会取消我的资格。每次技术面试,我都被要求分析或满足时间/空间要求。如果我在for循环中执行split或其他操作,我必须给出我的算法O(n^2),而不是O(n),这是应该的be@Iza实现这一点的方法是将字符串表示为字符或字节的数组(取决于您要走多远),然后对数组进行变异。在正常情况下,最远需要执行的操作是
“n”+str.slice(1)
。当然可以,但是如果要在索引处替换,而不是基于子字符串,该怎么办。另外,replace肯定是O(n)时间,也可能是O(n)空间。我认为不可能在O(1)时间内实现这种函数,因为你可以有越来越大的字符串,计算机必须排序。你为什么需要排序,这没有意义。在C语言中,这在O(1)时间内是微不足道的。访问权限为O(1),因此设置为O(1)
let str = "hello world"; 
str = str.replace("hello", "this");
console.log(str); // this world