我只需要用另一个替换一个数组对象的键。我将提供一个理由说明为什么我认为我需要在之后这样做以尝试避免 TLDR,以防有人发现我可能根本不需要这样做的更深层次的原因。
所以给出:
canvasImages = [
{
property1: 1
property2: 2
},
{
property1: 3,
property2: 4,
}
]
我想在数组中指定两个对象并遍历它们的属性(因为属性列表可能很长),然后说(伪代码):
canvasImages[1].property1 = canvasImages[2].property1;
canvasImages[2].property2 = canvasImages[2].property2;
etc...
尽可能少的代码。
理由:
我正在使用带有画布库的反应,其中状态数组中的两个可拖动画布对象需要切换 z 顺序而不触发反应的重新渲染(否则画布会丢失对象被拖动位置的记忆......)。
所以当我试图简单地做:
const {canvasImages} = this.state;
const oldIndex = 1; const newIndex = 2;
const reorderedCanvasImages = reorderArray(canvasImages,oldIndex,newIndex) //unshown function, just reorders the array
this.setState({
canvasImages: reorderedCanvasImages //this triggers a re-mount of the URLImage component
});
或者:
const newCanvasImages = _.clonedeep(canvasImages);
const oldIndex = 1; const newIndex = 2;
const reorderedCanvasImages = reorderArray(canvasImages,oldIndex,newIndex)
this.state.canvasImage[0] = newCanvasImages[0];
this.state.canvasImage[1] = newCanvasImages[1];
那些 canvasImages 失去任何拖动位置:
canvasImages.map((canvasImage, index) => {
//remounted after setState on canvasImages or even after changing array positions within this.state.canvasImages
return (
<URLImage
src={`${canvasImage.image}`}
isInteractable={activeCanvasImageIndex === index}
className={`canvas__interactable`}
key={`canvas__interactable--${canvasImage.object}_${index}`}
/>
)