Создание объекта со значениями без undefined

Рейтинг: 0Ответов: 1Опубликовано: 03.07.2023

Есть код:

    let findOptions: any = {};

    if (value) {
        findOptions.value = value;
    }
    if (headers) {
        findOptions.headers = headers;
    }
    if (key) {
        findOptions.key = key;
    }

Но мне не нравится, что для создания объекта надо проверять каждое значение на undefined, можно ли как-то его создать, без этих проверок и без использования delete?

Exam:

const value = '123';
const headers = undefined;
const key = '67';
>>>
{
   value = '123',
   key = '67'
}

Ответы

▲ -1

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

В таком случае вы можете использовать Proxy реализовав в нем обработчик set:

const findOptions: any = new Proxy({}, {
  set(target, prop, value) {
    if (value !== undefined) {
      target[prop] = value;
    }
    return true;
  },
});

findOptions.value = '123';
findOptions.headers = undefined;
findOptions.key = '67';
findOptions.other = '100';
console.log(findOptions)//{ "value": "123","key": "67","other": "100"} 

Либо вы можете создать класс с подобной функциональностью, где в сеттере вы также будете проверять значение:

class Options {
    private _findOptions: any = {};
    set findOptions({ propertyName, value }) {
        if(value !== undefined){
            this._findOptions[propertyName] = value;
        }  
    }
    get findOptions() {
        return this._findOptions;
    }
}

let options = new Options();
options.findOptions = { propertyName: 'value', value: undefined }; 
console.log(options.findOptions); //  {}