Reputation: 1143
assume i have an object call userData = {..}
and I want to define an object userDataB with properties a,b,c and d from userData but only of those which defined. I know I can do something like this:
userDataB = {}
if(userData.a){userDataB.a = a};
if(userData.b){userDataB.b = b};
...
but, there is something cleaner? mayber from es5 or es6?
Upvotes: 0
Views: 893
Reputation: 164
This might help too
const object1 = {
a: 'somestring',
b: 42,
c: false,
d: undefined
};
let object2 = Object.assign(
...Object.entries(object1).map(obj =>
obj[1] !== undefined ? { [obj[0]]: obj[1] } : {}
)
);
or this
let object2 = Object.assign(
...Object.keys(object1).map(key =>
object1[key] !== undefined ? { [key]: object1[key] } : {}
)
);
or this
let object2 = Object.entries(object1).reduce(
(a, v) => (v[1] !== undefined ? Object.assign(a, { [v[0]]: v[1] }) : a),
{}
);
Upvotes: 2
Reputation: 555
Depending on your use case, this might work for you:
const newObj = Object.keys(oldObj).reduce((all,propertyName) => {
if(oldObj[propertyName] != null){ // change this to your criteria
all[propertyName] = oldObj[propertyName];
}
return all;
},{});
Upvotes: 0
Reputation: 30739
Just use Object.assign()
to clone it into a new object:
var userData = {
a: 1,
b: 2,
d: 3
}
userDataB = Object.assign({}, userData);
console.log(userDataB);
For undefined
or null
values:
var userData = {
a: 1,
b: 2,
c: null,
d: 3,
e: undefined
}
var userDataB = Object.assign({}, userData);
Object.keys(userDataB).forEach((key) => (userDataB[key] == null) && delete userDataB[key])
console.log(userDataB);
Upvotes: 0
Reputation: 44125
Use JSON
methods - they auto-strip undefined
properties:
var userData = {
a: "a",
b: false,
c: undefined,
d: 0
};
var userDataB = JSON.parse(JSON.stringify(userData));
console.log(userDataB);
Upvotes: 1