- 此问题在此处已有答案**:
How to determine if Javascript array contains an object with an attribute that equals a given value?(27个答案)
昨天关门了。
我正在开发一个简单的react应用程序,希望防止表单向对象数组添加重复的元素
我有两个状态示例
const [persons, setPersons] = useState([
{ name: 'Arto Hellas' }
])
const [newName, setNewName] = useState('')
在输入更改时设置新名称的函数
function handleNoteChange(e){
console.log(e.target.value)
setNewName(e.target.value)
}
一个函数用于在提交表单时向数组添加新元素
function addName(e){
const newNameObject = {
name: newName
}
console.log(persons.includes(newNameObject))
e.preventDefault()
setNewName("")
if(persons.includes(newNameObject) ){
alert(`${newName} has already been added`)
}
else{
setPersons(persons.concat(newNameObject))
}
}
我有一个console.log,我在其中检查我输入的当前名称("Arto Hellas")是否已经在persons数组中,它在应该为真的时候说这是假,因为这是迄今为止我状态中的第一个也是唯一的项目,不确定发生这种情况的确切原因
1条答案
按热度按时间vptzau2j1#
它返回false,因为include是基于引用而不是每个对象的值进行比较的。
要解决您的用例,您必须手动迭代数组中的每个对象,并与所需的元素进行对象比较,如下所示。
注意:此方法仅在属性顺序相同时有效