将对象推送到数组时,如何不推送同一对象?

时间:2019-09-06 09:49:56

标签: javascript arrays reactjs push

我正在使用复选框中选中的对象创建新数组。但是,当我再次提交时,出现错误“ flattenChildren(...):遇到两个具有相同密钥.$3的孩子。孩子密钥必须是唯一的;当两个孩子共享一个密钥时,只有第一个孩子会是用过的。”我只想推送唯一的对象。

我正在使用反应

handleSubmit(){

    let students = []
    for(let idx in this.state.checked){
        if(this.state.checked[idx] ){
            students.push(this.state.allStudent[idx])
        }
    }
    console.log('students', students)
    this.setState({
        studentList: update(this.state.studentList, {$push: students})
    })

}

2 个答案:

答案 0 :(得分:3)

使用React时,您应该能够安全地使用ES6设置对象,该对象可以存储任何类型的唯一值。 (https://devdocs.io/javascript/global_objects/set)。

例如

handleSubmit(){

let students = []
for(let idx in this.state.checked){
    if(this.state.checked[idx] ){
        students.push(this.state.allStudent[idx])
    }
}

students = [...new Set(students)];

console.log('students', students)
this.setState({
    studentList: update(this.state.studentList, {$push: students})
})

}

答案 1 :(得分:1)

我不是React.js的专家,但这似乎是一个简单的问题(仅将唯一元素推入JS数组)。修改如下的函数应该可以工作:

handleSubmit(){
    let students = [...this.state.studentList];
    for(let idx in this.state.checked){
        if(this.state.checked[idx] && (students.indexOf(this.state.checked[idx]) === -1)){
            students.push(this.state.allStudent[idx])
        }
    }
    console.log('students', students)
    this.setState({
        studentList: update(this.state.studentList, students)
    })
}

我们在这里所做的基本上是在'students'数组上使用'indexOf()'方法来检查当前元素是否存在于数组中-如果在数组中未找到元素,indexOf()方法将返回-1。数组。希望这会有所帮助!

相关问题