Javascript push-to-array不添加变量的实际值

Javascript push-to-array不添加变量的实际值,javascript,Javascript,我有一个foreach循环,我正在向我的DBSchema添加键值对,但是当我使用“DBSchema.push({key:DBSchemaTemp})”时,它并没有放入“key”的实际值,而是在推“key”这个词;我怎样才能解决这个问题 var DBSchema = []; async.each(Object.keys(config.models), function(key) { var DBSchemaTemp = []; . . Working on DB

我有一个foreach循环,我正在向我的DBSchema添加键值对,但是当我使用“DBSchema.push({key:DBSchemaTemp})”时,它并没有放入“key”的实际值,而是在推“key”这个词;我怎样才能解决这个问题

var DBSchema = [];
async.each(Object.keys(config.models), function(key) {
    var DBSchemaTemp = [];

    .
    .
     Working on DBSchemaTemp
    .
    .

    DBSchema.push({key: DBSchemaTemp});
});
结果如下所示:

[ { key: [ [Object], [Object], [Object], [Object] ] },
  { key: [ [Object] ] },
  { key: [ [Object] ] },
  { key: [ [Object], [Object], [Object], [Object] ] } ]
编辑: 期望输出:

{ name1: [ [Object], [Object], [Object], [Object] ] ,
   name2: [ [Object] ] ,
   name3: [ [Object] ] ,
   name4: [ [Object], [Object], [Object], [Object] ] }
或:

使用汉密尔顿的解决方案后:

var arrayInSchema = DBSchema[key];
if(typeof arrayInSchema === 'undefined') DBSchema[key] = [];
DBSchema[key].push(DBSchemaTemp);

  { user:
    [ [ Name: { AttributeName: 'Name', AttributeType: 'STRING' },
        Email: { AttributeName: 'Email', AttributeType: 'STRING' },
        Password: { AttributeName: 'Password', AttributeType: 'STRING' },
        role: { AttributeName: 'role', AttributeType: 'STRING' } ] ]
    name2:
    [ [ url: { AttributeName: 'url', AttributeType: 'STRING' } ] ]
    name3:
    [ [ Name: { AttributeName: 'Name', AttributeType: 'STRING' },
        Caption: { AttributeName: 'Caption', AttributeType: 'STRING' },
        url: { AttributeName: 'url', AttributeType: 'collection' } ] ]
    name4:
    [ [ media: { AttributeName: 'media', AttributeType: 'collection' } ] }
但是有一个重复的括号!也就是说,“如果该键已经存在,是否也可以与以前的结果合并?”我的意思是,如果在另一个测试中,如果我们再次按下以下按钮,它应该将其与以前已经存在的结果合并:

用户: [地址:{AttributeName:'Name',AttributeType:'STRING'}]

我猜问题是重复的偏执;我不知道他们是怎么来的;如果我没有它们,那么以下方法应该有效:

var arrayInSchema = DBSchema[key];
if (typeof arrayInSchema === 'undefined') {
    DBSchema[key] = [];
    DBSchema[key].push(DBSchemaTemp);
} else {
    DBSchema[key].concat(DBSchemaTemp);
}

谢谢

试试这样的方法:

var DBValue = [];
DBValue[key] = DBSchemaTemp;
DBSchema.push(DBValue);
var arrayInSchema = DBSchema[key];
if(typeof arrayInSchema === 'undefined') DBSchema[key] = [];
DBSchema[key].push(DBSchemaTemp);
本质上,当使用对象文字时,那里的“键”不被视为变量。通过使用括号符号来设置值,它将被解释为一个变量(而不是一个字符串),您应该准备好了

编辑:要获得所需的输出,请尝试以下操作:

var DBValue = [];
DBValue[key] = DBSchemaTemp;
DBSchema.push(DBValue);
var arrayInSchema = DBSchema[key];
if(typeof arrayInSchema === 'undefined') DBSchema[key] = [];
DBSchema[key].push(DBSchemaTemp);

“本质上,当使用JSON‘键’时,不考虑变量。”幸运的是,这里没有人使用JSON。OP使用的是对象初始值设定项或对象文字,与JSON无关。请不要将对象文本称为“JSON”。“通过使用数组访问设置值”,这种访问属性的方式称为括号表示法,与数组无关(与其他语言不同)。然而,括号表示法确实是访问数组属性(元素)的唯一方法,因为数字不是有效的标识符名称,所以点表示法不起作用。我还想知道如何在命令行中看到对象的真实内容?现在没有显示,请看我编辑的问题;我现在编辑它;提到我想要的输出;你能帮我一下吗;感谢您的帮助,请参阅我的编辑。您创建的结构看起来像数组的映射。您所说的“合并”是什么意思?如果不知道DBSchemaTemp对象的真实外观,很难说。关于合并对象的详细信息。我还想知道如何在命令行中看到对象的真实内容?它现在不显示“它取决于浏览器,但
console.dir(value)
应该在任何地方都可以工作。但在我的情况下它不工作!您是否正在使用Node.js(因为您说的是“命令行”)?在这种情况下,Node.js不会记录任何超过某个级别的内容。您必须自己更深一层,例如使用
console.log(DBSchema[0])
。或者使用@FelixKling之类的东西,你能看看我编辑的问题吗;我现在编辑它;提到我想要的输出;你能帮我一下吗;提前感谢您的帮助如何做到这一点在重复问题中进行了解释。