开发者问题收集

根据索引替换数组中的对象

2018-04-18
1490

因此,我正在使用 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个回答

您可以使用另一个名为 findIndex 的数组函数,该函数具有与 some 相同的用法,但返回的结果与 indexOf 类似(返回数组中元素的索引,如果没有元素匹配,则返回 -1 ):

let index = this.state.thumbnailsAtivas.findIndex(
    thumbnail => thumbnail.label === textura.label
);

if(index !== -1) {
    this.state.thumbnailsAtivas[index] = yourNewObject;
}

注意: 为了稍微优化您的代码,您可以摆脱对 some 的调用,并使用 findIndex (一次)来检查存在性和查找索引。

ibrahim mahrir
2018-04-18