предположим, у меня есть вызов объекта userData = {..}
и я хочу определить объект userDataB со свойствами a, b, c и d из userData, но только из тех, которые определены. Я знаю, что могу сделать что-то вроде этого:
userDataB = {}
if (userData.a){userDataB.a = a};
if (userData.b){userDataB.b = b};
...
а есть что-то почище? может из es5 или es6?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто используйте Object.assign(), чтобы клонировать его в новый объект:
var userData = {
a: 1,
b: 2,
d: 3
}
userDataB = Object.assign({}, userData);
console.info(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.info(userDataB);Это не касается "определенной" части проблемы.
@JackBashford теперь это так
Я ищу чистую воду
Используйте методы JSON — они автоматически удаляют undefined свойства:
var userData = {
a: "a",
b: false,
c: undefined,
d: 0
};
var userDataB = JSON.parse(JSON.stringify(userData));
console.info(userDataB);Это а) также удалит любой метод, карту, набор, символический ключ и т. д. б) сбой для циклических ссылок
В зависимости от вашего варианта использования это может сработать для вас:
const newObj = Object.keys(oldObj).reduce((all,propertyName) => {
if (oldObj[propertyName] != null){ // change this to your criteria
all[propertyName] = oldObj[propertyName];
}
return all;
},{});
Это тоже может помочь
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),
{}
);
Обратите внимание, что ваш код будет производить
{}вместо{ a: 0, b: "" }, не уверен, что это предназначено.