如何将一个对象放入具有不同属性的数组中



所以我试图为一周中的每一天创建一个具有不同属性的数组。

我有这样一个数组:

const [fullData, setFullData] = useState([{index:-1,exercise:""}])

所以当用户在周一点击时,我有一堆练习供他选择。对于每个练习,我想把工作日的索引(我已经在我的代码中有了),比如1和他选择的练习。

它会以这样的形式结束:

[{index:1,exercise:"exercise1"},{index:1,exercise:"exercise2"}]

我真的不知道如何做到这一点,因为我已经在一个数组练习:

const [exerciseValues, setExerciseValues] = useState([]);

而我的工作日只是一个常规变量

let selectedWeekday_Index:number;

我已经尝试了一堆在stackoverflow中列出的例子,但我可以实现它到我的代码,有人能帮助我吗?我的最后一次尝试结束了这段代码-这不起作用。如果有人需要更多的细节来理解,请问我,我会更新它的问题。

const acceptExercises = () => {
let selectedElements = [...exerciseValues]
let savedData = [...fullData]

selectedElements.forEach(element => {
let copyData=savedData.map(item=>({
[item.exercise]:element,
[item.index]:selectedWeekday_Index
}))
setFullData(copyData)
});
}

我还建议您以不同的方式保存数据,如前面提到的@iz_

但是如果你仍然想这样做,你可以利用这个实现设置你的fullData:

const acceptExercises = () => {
setFullData((prev) => [
...prev,
...exerciseValues.map((exercise) => ({
index: selectedWeekday_Index,
exercise: exercise,
})),
]);
};

首先我们通过prev复制之前的值,然后我们通过exerciseValues映射并获得具有正确周索引的exercises列表,我们将其展开并添加到fullData