GO VEGAN
GO VEGAN

Reputation: 1143

javascript/typescript - add item to object only if defined

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

Answers (4)

Antenaina
Antenaina

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

enf0rcer
enf0rcer

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

Ankit Agarwal
Ankit Agarwal

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

Jack Bashford
Jack Bashford

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

Related Questions