Javascript 除非我将join(';';)存储到新变量中,否则join(';';)不起作用
我有一个state对象,它的“text”属性是字符串。我还有一个remove处理程序方法来删除我单击的char。如果我在一行中完成所有工作,那么join(“”)不起作用,React将其存储为数组,而不是字符串。但是,如果我创建一个新的变量来存储after join(“”),它就可以工作了 //这将存储到状态为->[h,e,y]Javascript 除非我将join(';';)存储到新变量中,否则join(';';)不起作用,javascript,reactjs,Javascript,Reactjs,我有一个state对象,它的“text”属性是字符串。我还有一个remove处理程序方法来删除我单击的char。如果我在一行中完成所有工作,那么join(“”)不起作用,React将其存储为数组,而不是字符串。但是,如果我创建一个新的变量来存储after join(“”),它就可以工作了 //这将存储到状态为->[h,e,y] let textArr = [...this.state.text].splice(index, 1).join(''); this.setState({text: te
let textArr = [...this.state.text].splice(index, 1).join('');
this.setState({text: textArr});
//不过,这一个很好用,就像->嘿
let textArr = [...this.state.text];
textArr.splice(index, 1);
let text = textArr.join('');
this.setState({text});
为什么第一个代码没有按预期工作,而第二个代码工作?这是因为您对拼接结果应用了
join
:
let textArr = [...this.state.text].splice(index, 1).join('');
这相当于:
let str= [...this.state.text]
let temp = str.splice(index, 1)
let textArr = temp.join('');
您在这里使用的是拼接。splice()方法在数组中添加/删除项,并返回删除的项。因此,在第一行中,基本上是对删除的项应用join。例如下
var arr1=[1,2,3,4,5,6];
//这里的结果将等于删除项的联接
var result=[…arr1]。拼接(1,2)。连接(“”);
console.log(result)//它将给出“23”
。splice
返回已删除的项目换句话说,文档是您的朋友:始终验证您的假设。换句话说,在问别人之前先问自己这个问题,了解你的代码在做什么——这可能是最重要的开发人员技能。(接下来是了解正则表达式的基础知识和理解递归。)哦,使用REPL(这里是JS控制台或只是一个NodeJS CLI REPL)一步一步地分解代码块,以便您可以立即看到某些代码的每一步发生了什么。