манипулирование объектами javascript, разбиение кода - PullRequest
0 голосов
/ 09 октября 2018

У меня есть объект, который нужно разделить, чтобы я мог повторно использовать код.Это объект конфигурации для БД.Это то, что mssql из пакета npm ожидает увидеть.

const config = {
    user: process.env.USER,
    password: process.env.PASS,
    server: process.env.SERVER,
    database: process.env.DB,

    options: {
        encrypt: false
    }
};

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

const config = {
    user: process.env.USER,
    password: process.env.PASS,
    server: process.env.SERVER,
    database: process.env.DB
}

const options = {
    encrypt: false
}

Я хочу что-то вроде этого, чтобы я мог просто как-то объединить 2 при использовании его для mssql, но тогда я все еще могу использовать const config в другом месте без options внутри него.Это возможно?когда я объединяю их, я пробую const mssqlConfig = { connection: config, options }; Но это дает мне дополнительный набор { } вокруг config, который мне не нужен.Любая помощь будет принята с благодарностью!Спасибо!

Ответы [ 5 ]

0 голосов
/ 09 октября 2018

Я думаю, что вы хотите использовать Object.assign (dest, source), этот метод будет копировать ключи из одного объекта в другой, например:

const config = {
    prop1: 'Prop value',
    prop2: 'Prop2 value',
}

const options = {
    encrypt: false
}

Object.assign(config, options);

console.log(config);

Запустите фрагмент, и вы увидите конечный результат, последний, но не менее важный Ссылка на MDN

0 голосов
/ 09 октября 2018

С ES2018 +, вы можете использовать оператор распространения (...) для распространения свойств объекта на новый объект, который является именно тем, что вы хотите.

const config = {
  user: "process.env.USER",
  password: "process.env.PASS",
  server: "process.env.SERVER",
  database: "process.env.DB"
}

const options = {
  encrypt: false
}

const mssqlConfig = { ...config, options };

console.log(mssqlConfig);
0 голосов
/ 09 октября 2018

Когда вы собираетесь использовать его, сделайте копию из config и добавьте к ней options.Вы можете сделать копию, используя Object.assign (это мелкая копия, но у вашего config нет вложенных объектов);

var configToUse = Object.assign({}, config);
configToUse.options = options;

Если вы также хотите скопировать options:

var configToUse = Object.assign({}, config, {options: Object.assign({}, options)});

Вы также можете использовать нотацию распространения свойств ES2018 +: 101

const configToUse = {...config, options}; // Doesn't copy options, just uses it
// or
const configToUse = {...config, options: {...options}};

¹ Да, действительно ES2018. Массив спред был в ES2015, но спред собственности не был до ES2018.

0 голосов
/ 09 октября 2018

Если вы используете ES6, вы можете использовать оператор распространения:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

Так что-то вроде:

const mssqlConfig = { ...config, options }

0 голосов
/ 09 октября 2018

Возможно Object.assign - это то, что вы ищете:

const config = {
  user: "process.env.USER",
  password: "process.env.PASS",
  server: "process.env.SERVER",
  database: "process.env.DB"
}

const options = {
  encrypt: false
}

const both = Object.assign({
  options: options
}, config);
console.log(both);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...