Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.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 除非我将join(';';)存储到新变量中,否则join(';';)不起作用_Javascript_Reactjs - Fatal编程技术网

Javascript 除非我将join(';';)存储到新变量中,否则join(';';)不起作用

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

我有一个state对象,它的“text”属性是字符串。我还有一个remove处理程序方法来删除我单击的char。如果我在一行中完成所有工作,那么join(“”)不起作用,React将其存储为数组,而不是字符串。但是,如果我创建一个新的变量来存储after join(“”),它就可以工作了

//这将存储到状态为->[h,e,y]

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)一步一步地分解代码块,以便您可以立即看到某些代码的每一步发生了什么。