Reputation: 445
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
});
Upvotes: 0
Views: 58
Reputation: 50787
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.
Upvotes: 1
Reputation: 370749
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.
Upvotes: 1
Reputation: 1325
The correct way to remove an item "xyz" from an object "obj" is
delete obj["xyz"];
Upvotes: 0