如何在动态对象变量

时间:2017-01-13 12:26:28

标签: javascript node.js

我正在制作的网站有两种不同的语言,每个数据都保存在mongodb中,前缀为_nl或_en 有了网址,我需要能够设置这样的语言:

http://localhost/en/This-Is-English-Head/This-Is-English-Sub

我的代码看起来像这样:

var headPage = req.params.headPage;
var subPage = req.params.subPage;
var slug = 'name';
var slugSub = 'subPages.slug_en';
var myObject = {};
myObject[slugSub] = subPage;
myObject[slug] = headPage;
console.log(myObject);
Site.find(myObject,
    function (err, pages) {
    var  Pages = {};

    pages.forEach(function (page) {
        Pages[page._id] = page;
    });

    console.log(Pages);

});

在console.log之后,我得到了以下内容:

{ 'subPages.slug_en': 'This-Is-English-Sub',
  name: 'This-Is-English-Head' }

您是否可以看到objectname subPages.slug_en被视为对象名称的字符串。 我知道javascript不支持下划线(我猜?)但我仍在寻找修复,否则我将被迫将我的数据库中的所有下划线更改为不同的字符...

编辑:

console.log的最终结果必须是:

{ subPages.slug_en: 'This-Is-English-Sub',
  name: 'This-Is-English-Head' }

保证:

{ 'subPages.slug_en': 'This-Is-English-Sub',
  name: 'This-Is-English-Head' }

否则它不起作用

1 个答案:

答案 0 :(得分:4)

您看到'subPages.slug_en'(带字符串引号)的原因是对象键中的.,而不是下划线。 对象键中肯定支持下划线而不引用。

使用subPages.slug_en(不带字符串引号)会要求您拥有如下对象:

{ subPages: {slug_en: 'This-Is-English-Sub'},
  name: 'This-Is-English-Head' }

您可以使用以下内容进行设置:

myObject['subPages']['slug_en'] = subPage;

或者简单地说:

myObject.subPages.slug_en = subPage;