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