gpt4 book ai didi

javascript - ReactJs setState 更改数组中对象的属性

转载 作者:行者123 更新时间:2023-12-01 03:09:31 24 4
gpt4 key购买 nike

我有点卡住了。我尝试用另一个数组中的另一个对象覆盖数组中的某个对象:

onStepsLayoutChange = (layout) => {
console.log("The new layout is", layout); //Array
this.setState((prevState) => ({
layout: layout,
stepsData: prevState.stepsData.map(step => {
layout.map(l => {
if(step.identifier === parseInt(l.i)){
console.log("Match", l, step); // "l" is not empty and actually matches only if "id" is identical
return {
...step,
layout: l //I want to override "layout" with the current layout "l"
}
}
});
return step
})
}), () => console.log("LayoutChange:", this.state.layout, this.state.stepsData)); // "layout" in each step is empty
};

在这种情况下我的失败是什么?

最佳答案

问题是,您缺少 #array.map 的默认行为。默认情况下,每个数组值映射都会返回一些值未定义。您正在 map 内运行 map ,因此stepData的最终值是:

[[...], [...], [....] ....]

不要使用嵌套映射,而是使用 #array.findIndex#array.find并返回值。

这样写:

stepsData: prevState.stepsData.map(step => {
let index;
index = layout.findIndex(l => step.identifier === parseInt(l.i));

if(index >= 0){
return {
...step,
layout: layout[index]
}
}

return step;
})

检查此片段:

let a = [1,2,3,4,5];
let b = [2,3];

let result = a.map(i => {
return b.map(j => {
if(i === j)
return 0;
})
return i;
})

console.log(result);

关于javascript - ReactJs setState 更改数组中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45941402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com