javascript - 如何使用 JavaScript 编写 reducer 来操作这个 JSON
问题描述
我有一个这样的 JSON
"decks": [
{
"id": 65,
"name": "deck1",
"cards": [
{
"question": "q1",
"answer": "a1"
},
{
"question": "q2",
"answer": "a2"
},
{
"question": "q3",
"answer": "a3"
}
]
},
{
"id": 83,
"name": "deck2",
"cards": []
}
现在,我想在添加一张卡片后返回甲板对象
{
"question": "q4",
"answer": "a4"
},
并且该卡应该添加到相应的 id假设在这种情况下为 -65,结果应该像这样返回
"decks": [
{
"id": 65,
"name": "deck1",
"cards": [
{
"question": "q1",
"answer": "a1"
},
{
"question": "q2",
"answer": "a2"
},
{
"question": "q3",
"answer": "a3"
},
{
"question": "q4",
"answer": "a4"
}
]
},
{
"id": 83,
"name": "deck2",
"cards": []
}
这是我在其中操作对象的减速器代码
case ADD_CARD:
var index = state.decks.findIndex(x => x.id === action.deckId);
return {
...state.decks,
decks: state.decks[index].cards.concat(action.newCard),
};
你能帮我写正确的reducer代码吗?上面的代码没有给出预期的结果。感谢您的时间和支持。
解决方案
case ADD_CARD:
const newState = {...state};
var index = state.decks.findIndex(x => x.id === action.deckId);
let deck = {...state.decks[index]};
deck = {...deck, { cards: [...deck.cards, action.newCard] };
newState[index] = deck;
return newState;
推荐阅读
- algorithm - What is the main difference between Theta star algorithm and Phi star algorithm?
- xamarin - Xamarin ListView spinner goes away too soon for asynchronous command
- python - 我们可以在 Scrapy 中使用锁吗?由于 Scrapy 是单线程的,因此它们是否需要?
- r - 如何替换数据框列表中的单个值
- vba - Word 2007 VBA pause macro for user to manually select cursor position or range with the mouse
- swift - 当按钮的背景颜色为渐变时,标题消失了
- java - 如何返回数组中匹配数字之间的最小距离?
- c++ - 什么时候在 C++ 中使用 exit() 与异常比较好?
- python - 如何从字典中的键值对跳转以创建循环列表
- python - 即使在简单的架构和大量数据中,我的 CNN 也会过拟合