javascript / typescript - добавить элемент в объект, только если он определен - PullRequest
0 голосов
/ 28 марта 2019

предполагается, что у меня есть вызов объекта userData = {..}

, и я хочу определить объект userDataB со свойствами a, b, c и d из userData, но только из тех, которые определены.Я знаю, что могу сделать что-то вроде этого:

userDataB = {}
if(userData.a){userDataB.a = a};
if(userData.b){userDataB.b = b};
...

но есть что-то чище?майбер из эс5 или эс6?

Ответы [ 4 ]

1 голос
/ 28 марта 2019

Это может помочь тоже

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] } : {}
    )
);

или это

let object2 = Object.assign(
    ...Object.keys(object1).map(key =>
        object1[key] !== undefined ? { [key]: object1[key] } : {}
    )
);

или это

let object2 = Object.entries(object1).reduce(
    (a, v) => (v[1] !== undefined ? Object.assign(a, { [v[0]]: v[1] }) : a),
    {}
);
1 голос
/ 28 марта 2019

Используйте JSON методы - они автоматически удаляют undefined свойства:

var userData = {
  a: "a",
  b: false,
  c: undefined,
  d: 0
};

var userDataB = JSON.parse(JSON.stringify(userData));

console.log(userDataB);
0 голосов
/ 28 марта 2019

В зависимости от вашего варианта использования, это может работать для вас:

const newObj = Object.keys(oldObj).reduce((all,propertyName) => {
  if(oldObj[propertyName] != null){ // change this to your criteria
    all[propertyName] = oldObj[propertyName];
  }
  return all;
},{});
0 голосов
/ 28 марта 2019

Просто используйте Object.assign(), чтобы клонировать его в новый объект:

var userData = {
  a: 1,
  b: 2,
  d: 3
}
userDataB = Object.assign({}, userData);
console.log(userDataB);

Для значений undefined или null:

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);
...