根据索引替换数组中的对象
2018-04-18
1490
因此,我正在使用 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]},);
}
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