javascript对象处理,代码拆分

时间:2018-10-09 17:07:47

标签: javascript node.js object

我有一个需要拆分的对象,因此我可以重新使用代码。 它是数据库的配置对象。 这就是 npm 软件包中的mssql所期望的。

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 :(得分:2)

使用时,请复制config 并将其添加options。您可以使用Object.assign进行复制(这是一个浅表副本,但是您的config没有嵌套的对象);

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

如果您也要复制options

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

您还可以使用ES2018 +的属性扩展表示法:¹

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

¹是的,真的是ES2018。 Array 传播是在ES2015中进行的,但属性传播直到ES2018才进行。

答案 1 :(得分:2)

使用ES2018 +,您可以使用spread(...)运算符将对象属性扩展到新对象上,这正是您想要的。

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

答案 2 :(得分:0)

也许您正在寻找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);

答案 3 :(得分:0)

如果您使用的是ES6,则可以使用扩展运算符:

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

类似这样:

const mssqlConfig = { ...config, options }

答案 4 :(得分:0)

我认为您想使用Object.assign(dest,source),此方法会将密钥从一个对象复制到另一个,例如:

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

const options = {
    encrypt: false
}

Object.assign(config, options);

console.log(config);

运行该代码段,您将看到最终结果,最后但并非最不重要的MDN Reference