0
\$\begingroup\$
const getSelectedItemsIds = selectedItemsList => {

  let keys = Object.keys(selectedItemsList);
  let selectedItems = [];

  keys.map(k => {
    selectedItemsList[k].map(id => {
      if (k.includes("projectIds")) {
        return selectedItems.push({ type: "PROJECT", id });
      } else if (k.includes("subjectGroupIds")) {
        return selectedItems.push({
          type: "SUBJECT_GROUP",
          id
        });
      } else if (k.includes("subjectIds")) {
        return selectedItems.push({ type: "SUBJECT", id });
      }
    });
  });

  return selectedItems;
}

I have written my custom logic to get the desired result, if anyone can validate and tell me if there's a better way to do it. I'm adding input and expected out below:

I/P: 
{
    projectIds: [2]
    subjectGroupIds: [] // incase multiple subjects are grouped togehter
    subjectIds: [4]
}

Expected format:
[{"type":"PROJECT","id":2},{"type":"SUBJECT","id":4}]

Thanks in advance!

\$\endgroup\$
0
\$\begingroup\$

Your code is not bad. You use functional style to loop through the data, which is good. But inside the loop you do not have to check with if-elseif-elseif, as this is not solid when it comes to many many cases. Maybe it would be better to use a map object to guide the process of matching data.

getSelectedItemsIds = selectedItemsList => {
    const keyNamesMap = {
        projectIds: "PROJECT",
        subjectGroupIds: "SUBJECT_GROUP",   
        subjectIds: "SUBJECT"
    };
    let selectedItems = [];

    Object.keys(keyNamesMap).map( k => {
        selectedItemsList[k].map ( id => {
            selectedItems.push (
                {
                    type: keyNamesMap[k],
                    id: id
                }
            );
        });       
    });
    return selectedItems;
}

This way it is more clear and more easy to add another type.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.