gpt4 book ai didi

javascript - React 将唯一对象推送到数组中

转载 作者:行者123 更新时间:2023-11-28 12:17:55 26 4
gpt4 key购买 nike

我有一个函数应该向数组添加唯一元素:

addLanguage = (val) => {

for(let i=0; i< val.length; i++){
console.log(val[i].id)
if(this.state.createNewDeliveryData.languages.indexOf(val[i].id === -1)){
this.state.createNewDeliveryData.languages.push(val[i])
}
}
}

参数“val”每次都会获取一个带有附加元素的数组(我在 UI 上有一个多选框,从中添加语言),这就是为什么在 If 循环中我试图检查我的语言数组是否已经具有该特定的元素。然而这没有效果,最后我的语言数组包含相同的元素,即在后续调用中添加相同的元素两次或三次等。

['German']
['German', 'German', 'Arabic']
...

我做错了什么?

最佳答案

您正在数组中查找 false 的索引。这是因为,indexOf(val[i].id === -1) 将始终检查 indexOf(false) 是否为 -1。所以你重新添加每种语言。

您可能正在寻找与此更相似的算法:

addLanguage = (val) => {
// Get a copy of the languages state.
const languages = [...this.state.createNewDeliveryData.languages];
for(let i=0; i< val.length; i++){
if(languages.indexOf(val[i].id) === -1) { // notice that there is a parenthesis after `id`.
languages.push(val[i].id)
}
}
this.setState({createNewDeliveryData: {languages}}); // update state and trigger re-render if there are new languages.
}

请注意,您应该始终使用 setState 来改变 React 中的状态。

关于javascript - React 将唯一对象推送到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45029396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com