Множество c свойств объекта для массива - PullRequest
1 голос
/ 26 января 2020

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

db.run(`INSERT INTO accounts(uuid, email, pass, device, user, pet, gold, is_active) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`,
    [this.uuid, this.email, this.pass, this.device, this.user, this.pet, this.gold, this.is_active],
    function (err) {
        if (err) {
            return console.log(err.message);
        }
    });

db - это мой экземпляр sqlite3

Я уверен, что должен быть способ лучше его кодировать (может быть, что-то с распространением?). Но я не понимаю, как получить только указанные c свойства из 'this' (он содержит другие свойства, которые мне не нужны в моей базе данных)

1 Ответ

2 голосов
/ 26 января 2020

Вы можете создать массив свойств для извлечения из this, затем .map it:

const props = 'uuid email pass device user pet gold is_active'.split(' ');
db.run(
  `INSERT INTO accounts(uuid, email, pass, device, user, pet, gold, is_active) VALUES(?, ?, ?, ?, ?, ?, ?, ?)`,
  props.map(prop => this[prop]),
  function(err) {
    if (err) {
      return console.log(err.message);
    }
  }
);

Может быть еще менее повторяющимся (и менее подверженным ошибкам), сохранив строку свойства, так что вы можете разделить на него и передать первый аргумент .run:

const propsStr = 'uuid, email, pass, device, user, pet, gold, is_active';
const props = propsStr.split(', ');
db.run(
  `INSERT INTO accounts(${propsStr}) VALUES(${propsStr.replace(/\w+/g, '?')})`,
  props.map(prop => this[prop]),
  function(err) {
    if (err) {
      return console.log(err.message);
    }
  }
);
...