Распределение условий на основе реквизитов объекта

#javascript #javascript-objects #spread

Вопрос:

Я ищу способ удалить пустые или пустые реквизиты, в моем примере obj2 я хочу избежать копирования свойства места рождения или любого другого реквизита, который приходит пустым.

 const obj1 = { firstName: 'Foo', age: 22 };

const obj2 = { lastName: 'Bar', gender: 'M', birthPlace: '' };

const newObj = { ...obj1, ...obj2 };
 

Желаемый результат:

 {firstName: 'Foo', age: 22, lastName: 'Bar', gender: 'M'}
 

Возможно ли использование реквизитов условных объектов с использованием операторов распространения в javascript?

 const updateUserObj = {
  ...(obj1 !== check here<hasPropEmpty> amp;amp; obj2)
}
 

Комментарии:

1. Я не думаю, что для этого есть какая-либо стенографическая запись.

Ответ №1:

Для этого нет стенографии, но вы можете легко написать функцию, которая отфильтровывает эти свойства.

 function nonEmptyProps(obj) {
  return Object.fromEntries(Object.entries(obj).filter(([k, v]) => v !== null amp;amp; v !== ''));
}

const obj1 = { firstName: 'Foo', age: 22 };

const obj2 = { lastName: 'Bar', gender: 'M', birthPlace: '' };

const newObj = {...nonEmptyProps(obj1), ...nonEmptyProps(obj2)};
console.log(newObj); 

Ответ №2:

С помощью Object#entries вы получаете пары ключ-значение объекта, затем с помощью Array#filter итерации по этим парам отфильтровываете пары с пустыми значениями. Затем с помощью Object#fromEntries вы создаете обратно полученные пары в объект.

 const filterProps = (obj = {}) => 
  Object.fromEntries(
    Object.entries(obj).filter(([key, value]) => 
      value !== null amp;amp; value !== undefined amp;amp; value !== ''
    )
  );

const obj1 = { firstName: 'Foo', age: 22 };
const obj2 = { lastName: 'Bar', gender: 'M', birthPlace: '' };

const newObj = { ...filterProps(obj1), ...filterProps(obj2) };

console.log(newObj);