Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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_Arrays_Reactjs - Fatal编程技术网

Javascript 阵列拼接正在创建空白阵列

Javascript 阵列拼接正在创建空白阵列,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有以下代码 constructor(props) { super(props); this.state = {registrations: [{firstName: "foo", lastName: "bar", activity: "Science Lab", restrictions: "a,b,c"}]} } addRegistration(registration) { console.log('came i

我有以下代码

     constructor(props) {
        super(props);
        this.state = {registrations: [{firstName: "foo", lastName: "bar", activity: "Science Lab", restrictions: "a,b,c"}]}
     }
     addRegistration(registration) {
        console.log('came inside event handler to add registration')
        console.log(registration)
        console.log('existing state')
        console.dir(this.state.registrations)            
        var newState = this.state.registrations.splice() // copy
        console.dir(newState)
        newState.push(registration)
        console.log(newState)
        this.setState({registrations: newState})
    }
当我运行代码并调用addRegistration事件处理程序时,我看到以下输出

[Log] {firstName: "Foo", lastName: "Bar", activity: "Swimming", restrictions: "a,b"} (Registration.html, line 404)
[Log] existing state (Registration.html, line 405)
[Log] [Object] (1) (Registration.html, line 406)
[Log] [] (0) (Registration.html, line 408)
[Log] [Object] (1) (Registration.html, line 410)
所以我得到一个有效的注册对象作为输入参数。在日志的第3个条目中,我们看到现有状态有一个大小为1的数组。(这是构造函数中的foo对象

接下来,我们看到对
this.state.registrations.splice()的调用创建了一个空数组。然后,作为参数接收的新注册对象被推送到创建的空数组中,从而创建另一个大小为1的数组

我不明白为什么splice()创建了一个空数组。它应该返回一个现有状态的副本,然后推送应该导致数组大小为2

我遗漏了什么?

返回已删除元素的数组,而方法将数组的一部分的浅层副本返回到从
begin
end
(不包括end)中选择的新数组对象中。您可以使用扩展运算符语法或类似切片的方法创建数组的副本

var newState = this.state.registrations.slice() 


使用
.slice()
复制而不是
.splice()
啊……这很简单,谢谢!
var newState = [...this.state.registrations]