I have the following object, and want to set all the values in it to null, while maintaining the objects structure
var objs = {
a: {
prop1: {id: null, val: 10},
prop2: true,
prop3: null,
},
b: {
prop1: {id: null, val: 20},
prop2: true,
prop3: null,
},
c: 10
}
The results needs to be:
var objs = {
a: {
prop1: {id: null, val: null},
prop2: null,
prop3: null,
},
b: {
prop1: {id: null, val: null},
prop2: null,
prop3: null,
},
c: null
}
This solution works for me, and I believe it should work for any depth. But if there is more elegant or efficient solution, please let me know.
var objs = {
a: {
prop1: {id: null, val: 10},
prop2: true,
prop3: null,
},
b: {
prop1: {id: null, val: 20},
prop2: true,
prop3: null,
},
c: 10
}
function nullTest(val){
for (key in val) {
if(typeof(val[key]) !== 'object') {
val[key] = null;
} else {
val[key] = nullTest(val[key])
}
}
return val
}
console.log(nullTest(objs));
Thanks
You can use Object.keys to get all the keys of the object, loop over them using forEach, and recurse accordingly.
var objs = {
a: {
prop1: {id: null, val: 10},
prop2: true,
prop3: null,
},
b: {
prop1: {id: null, val: 20},
prop2: true,
prop3: null,
},
c: 10
}
function nullTest(val){
return Object.keys(val).forEach(k=>val[k]=val[k]===Object(val[k])?nullTest(val[k]):null), val;
}
console.log(nullTest(objs));
You can use Array.prototype.reduce to create a new object without modifying the old one.
const objs = {
a: {
prop1: {id: null, val: 10},
prop2: true,
prop3: null,
},
b: {
prop1: {id: null, val: 20},
prop2: true,
prop3: null,
},
c: 10
};
function nullTest(val){
return Object.keys(val).reduce((acc,key)=>(acc[key]=val[key]===Object(val[key])?nullTest(val[key]):null,acc),{});
}
console.log('new object:', nullTest(objs));
console.log('objs:', objs);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With