@kawiyibit

Как не возвращать данные из конструктора если их нет?

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

class Article {
  constructor(data) {
    this.author = data.author;
    this.description = data.description
  }
}
const authorOne = new Article({
  author: 'Vasya'
});


В этом случае создастся объект

{
  author: 'Vasya',
  description: undefined
}


А как вернуть только заполненные поля? Класс это самый правильный способ в данном случае иил есть альтернативы?
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
Зачем вам класс, у вас методы какие-то будут? Экземпляр класса с отсутствующими свойствами это нехорошо.
function objectMaker(schema, src) {
  return Object.keys(schema).reduce((acc, el) => {
      if (src.hasOwnProperty(el)) {
         acc[el] = src[el]
      }
      return acc;
  }, {})
}

const mySchema = {
  author: 'string',
  description: 'string',
}
const source = {
  author: 'Vasya',
  garbage: 'dfsfsdf',
}

const authorOne = objectMaker(mySchema, source);


Домашнее задание
joi
class-transformer
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@tvsjke
информация засекречена
class Article {
  constructor(data) {
  	Object.keys(data).forEach(key => {
    	this[key] = data[key];
    })
  }
}
Ответ написан
SergeyEgorov
@SergeyEgorov
Веб разработчик
class Article {
  constructor(data) {
    this.author = data.author;
    if(data.description){
        this.description = data.description;
    }
  }
}
Ответ написан
IgorPI
@IgorPI
class Article {
  constructor(data) {
    for (let key in data) {
      this[key] = data[key]
    }
  }
}

const authorOne = new Article({
  author: 'Vasya'
  
});

console.log(authorOne)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы