Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // cardInfo has all the information of each card that never has to change, e.g. card name, stats etc.
- const cardInfo = {
- 1: {
- name: "Card 1",
- info: "This is card 1"
- },
- 2: {
- name: "Card 2",
- info: "This is card 2"
- },
- 3: {
- name: "Card 3",
- info: "This is card 3"
- },
- 4: {
- name: "Card 4",
- info: "This is card 4"
- }
- };
- const initDecklist = new Map();
- initDecklist.set(1,{quantity: 1});
- initDecklist.set(3,{quantity: 2});
- let state = {
- decklist: initDecklist
- };
- const exampleCardToAdd = {
- id: 1
- };
- const exampleCardToAddAgain = {
- id: 4
- };
- const setState = (newState = {}) => {
- try {
- state = Object.assign(state, newState)
- } catch (e) {
- console.error(`Unable to update state with ${newState}`);
- }
- }
- const addCard = (cardId, oldDecklist, quantity = 1) => {
- const newDecklist = new Map(oldDecklist);
- if (newDecklist.has(cardId)) {
- const oldObject = newDecklist.get(cardId)
- const newObject = Object.assign(
- {},
- oldObject,
- {
- quantity: oldObject.quantity + quantity
- }
- );
- newDecklist.set(cardId, newObject);
- } else {
- newDecklist.set(cardId, { quantity });
- }
- return newDecklist;
- }
- const addCardToDeck = cardToAdd => {
- const { decklist } = state;
- const newDecklist = addCard(cardToAdd.id, decklist);
- setState({ decklist: newDecklist});
- }
- const addCardToDeckTwice = cardToAdd => {
- const { decklist } = state;
- const newDecklist = addCard(cardToAdd.id, decklist, 2);
- setState({ decklist: newDecklist});
- }
- const printCards = () => {
- const { decklist } = state;
- for (let [id, v] of decklist.entries()) {
- const details = cardInfo[id];
- console.log(`+++\nCard: ${details.name}\nQuantity: ${v.quantity}\nInfo: ${details.info}`);
- }
- }
- console.log(state);
- // { decklist: Map { 1 => { quantity: 1 }, 3 => { quantity: 2 } } }
- addCardToDeck(exampleCardToAdd);
- console.log(state);
- // { decklist: Map { 1 => { quantity: 2 }, 3 => { quantity: 2 } } }
- addCardToDeckTwice(exampleCardToAddAgain);
- console.log(state);
- /*
- { decklist:
- Map {
- 1 => { quantity: 2 },
- 3 => { quantity: 2 },
- 4 => { quantity: 2 } } }
- */
- printCards();
- /*
- +++
- Card: Card 1
- Quantity: 2
- Info: This is card 1
- +++
- Card: Card 3
- Quantity: 2
- Info: This is card 3
- +++
- Card: Card 4
- Quantity: 2
- Info: This is card 4
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement