0

I am new to json and javascript, I have below input:

    var input= {
    "careerLevelGroups": [
        {
            "201801": 58,
            "201802": 74,
            "careerLevel": "Analyst",
            "careerLevels": [
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000100"
                },
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000110"
                }
            ]
        },
        {
            "201801": 58,
            "201802": 74,
            "careerLevel": "Consultant",
            "careerLevels": [
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000080"
                },
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000090"
                }
            ]
        }
    ]
};

I need to create this result:

    var result = {
  [

        {
           "careerLevel": "Analyst",
            "careerLevels": [
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000100"
                },
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000110"
                }
            ]
        },
        {

            "careerLevel": "Consultant",
            "careerLevels": [
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000080"
                },
                {
                    "201801": 29,
                    "201802": 37,
                    "careerID": "10000090"
                }
            ]
        }
    ]
}

I think i need to do something like where in i only need careerLevel and careerLevels attributes (rest all should be deleted). I tried the loop structure and delete command for json but iam not getting the right format.

 let clJson = input.careerLevelGroups.forEach(element => {
  let keysToDelete = Object.keys(element).filter( // return keys with careerLevel and careerLevels);
 // delete keys

});
1
  • Your result (result = { [ .... ] }) is not a legal object. Should its one property retain the name "careerLevelGroups" (result = { careerLevelGroups: [ .... ] })? Commented Mar 30, 2018 at 19:07

3 Answers 3

1

Use the delete operator to delete keys:

var input = {
  "careerLevelGroups": [{
      "201801": 58,
      "201802": 74,
      "careerLevel": "Analyst",
      "careerLevels": [{
          "201801": 29,
          "201802": 37,
          "careerID": "10000100"
        },
        {
          "201801": 29,
          "201802": 37,
          "careerID": "10000110"
        }
      ]
    },
    {
      "201801": 58,
      "201802": 74,
      "careerLevel": "Consultant",
      "careerLevels": [{
          "201801": 29,
          "201802": 37,
          "careerID": "10000080"
        },
        {
          "201801": 29,
          "201802": 37,
          "careerID": "10000090"
        }
      ]
    }
  ]
};

const result = input.careerLevelGroups;
result.forEach(obj => {
  Object.keys(obj).forEach(key => {
    if (key !== 'careerLevel' && key !== 'careerLevels') delete obj[key];
  })
});
console.log(result);

Do note that this mutates the original object - it doesn't create a copy.

Sign up to request clarification or add additional context in comments.

Comments

1

The easiest solution seems to be one that uses object destructuring:

const input= {"careerLevelGroups": [{"201801": 58, "201802": 74, "careerLevel": "Analyst", "careerLevels": [{"201801": 29, "201802": 37, "careerID": "10000100"}, {"201801": 29, "201802": 37, "careerID": "10000110"}]}, {"201801": 58, "201802": 74, "careerLevel": "Consultant", "careerLevels": [{"201801": 29, "201802": 37, "careerID": "10000080"}, {"201801": 29, "201802": 37, "careerID": "10000090"}]}]}

const simplify = ({careerLevel, careerLevels}) => ({careerLevel, careerLevels})
const result = {careerLevelGroups: input.careerLevelGroups.map(simplify)}

console.log(result)

Note that the output is slightly altered from your original, which is not legal syntax.

Comments

0

The correct way to remove an item "xyz" from an object "obj" is

delete obj["xyz"];

1 Comment

I need to delete the other atributes dynamically

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.