簡體   English   中英

將對象推入數組時,如何不將同一對象推入數組?

[英]When pushing objects to array, how to not push same object?

我正在使用復選框中選中的對象創建新數組。 但是,當我再次提交時,出現錯誤“ 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})
    })

}

使用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})
})

}

我不是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。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM