在索引上替换数组中的对象

时间:2018-04-18 21:36:45

标签: javascript arrays reactjs object

所以,我正在使用react,我需要继续向对象数组添加对象(对象可能具有相同的index,这就是我检查labelindex的原因。当我想要添加的对象具有与该数组中已存在的属性相同的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]},);
 }

1 个答案:

答案 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(一次)来检查存在并找到索引。