Javascript/typescript — добавить элемент в объект, только если он определен

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

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

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

а есть что-то почище? может из es5 или es6?

Обратите внимание, что ваш код будет производить {} вместо { a: 0, b: "" }, не уверен, что это предназначено.

Jonas Wilms 28.03.2019 12:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
364
4

Ответы 4

Просто используйте 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);

Это не касается "определенной" части проблемы.

Jack Bashford 28.03.2019 12:05

@JackBashford теперь это так

Ankit Agarwal 28.03.2019 12:06

Я ищу чистую воду

GO VEGAN 28.03.2019 12:07

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

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

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

console.info(userDataB);

Это а) также удалит любой метод, карту, набор, символический ключ и т. д. б) сбой для циклических ссылок

Jonas Wilms 28.03.2019 12:12

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

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

Другие вопросы по теме