所以,我正在使用react,我需要继续向对象数组添加对象(对象可能具有相同的index
,这就是我检查label
和index
的原因。当我想要添加的对象具有与该数组中已存在的属性相同的label
属性时,它应该替换前一个对象。因此,假设每个label
只有一个对象。在我使用多个label
之前,我的工作是什么。当我这样做时,数组为每个label
...
if (this.state.thumbnailsAtivas.some(thumbnail => {
thumbnail.index === textura.index
}) && this.state.thumbnailsAtivas.some(thumbnail => {
thumbnail.label === textura.label
})) {
console.log("already in array");
}
else if (this.state.thumbnailsAtivas.some(thumbnail => thumbnail.label === textura.label)) {
console.log("label already with item");
this.state.thumbnailsAtivas.some((thumbnail, index) => {
const tempData = (this.state.thumbnailsAtivas).slice(0);
tempData[index] = textura;
this.setState({thumbnailsAtivas: tempData})
})
} else {
this.setState({thumbnailsAtivas: [...this.state.thumbnailsAtivas, textura]},);
}
答案 0 :(得分:3)
您可以使用另一个名为findIndex
的数组函数,该函数与some
具有相同的用法但返回indexOf
之类的结果(返回数组中元素的索引或{{ 1}}如果没有元素匹配):
-1
注意:为了优化您的代码,您可以摆脱对let index = this.state.thumbnailsAtivas.findIndex(
thumbnail => thumbnail.label === textura.label
);
if(index !== -1) {
this.state.thumbnailsAtivas[index] = yourNewObject;
}
的调用并使用some
(一次)来检查存在并找到索引。