Javascript - любой оператор покоя, который пропускает неопределенные свойства? - PullRequest
2 голосов
/ 21 марта 2019

У меня есть это:

var filters = {a: 1, b: undefined}

И я хочу это:

{ a:1 }

Есть ли способ получить объект выше, используя современные функции Javascript, такие как {...filters}?

Ответы [ 2 ]

4 голосов
/ 21 марта 2019

Если вы заранее не знаете единственное свойство, равное undefined, это невозможно с синтаксисом покоя или чем-то новым, хотя вы можете достичь его путем сериализации идесериализация объекта.Код короткий, но не элегантный и работает, только когда все в объекте сериализуемо:

var filters = {a: 1, b: undefined};
var filtersNoUndef = JSON.parse(JSON.stringify(filters));
console.log(filtersNoUndef);

Или, конечно, вы можете перебирать свойства вручную:

var filters = {a: 1, b: undefined};
const filtersNoUndef = { ...filters };
Object.entries(filtersNoUndef).forEach(([key, val]) => {
  if (val === undefined) {
    delete filtersNoUndef[key];
  }
});
console.log(filtersNoUndef);
0 голосов
/ 21 марта 2019

Альтернатива с использованием функции reduce

let filters = {a: 1, b: undefined};
let result = Object.entries(filters).reduce((a, [key, value]) => value === undefined ? a : Object.assign(a, {[key]: value}), Object.create(null));

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...