从对象创建嵌套数组失败

时间:2016-05-10 20:57:11

标签: javascript

我将这些数据存储在mongodb

       {
    "_id" : "RLvWTcsrbRXJeTqdB",
    "examschoolid" : "5FF2JRddZdtTHuwkx",
    "examsubjects" : [
        {
            "subject" : "Z4eLrwGwqG4pw4HKX"
        },
        {
            "subject" : "fFcWby8ArpboizcT9"
        }
    ],
    "examay" : "NrsP4srFGfkc5cJkz",
    "examterm" : "5A5dNTgAkdRr5j53j",
    "examclass" : "gYF2wE4wBCRy9a3ZC",
    "examname" : "First",
    "examdate" : ISODate("2016-05-07T22:41:00Z"),
    "examresultsstatus" : "notreleased"
}

我对这部分更感兴趣

"examsubjects" : [
        {
            "subject" : "Z4eLrwGwqG4pw4HKX"
        },
        {
            "subject" : "fFcWby8ArpboizcT9"
        }
    ],

我正在尝试获取上面的部分并将其转换为看起来像这样的数组

[{
"Z4eLrwGwqG4pw4HKX" : "0",
"fFcWby8ArpboizcT9" : "0"
}],

上面的值成为构成新数组的键。我正在使用此代码

    console.log(doc.examsubjects);
    var result = new Array();
    for (i = 0; i < doc.examsubjects.length; i++) {
        var arr = [];
        for (var prop in doc.examsubjects[i]) {

            arr.push(doc.examsubjects[i][prop]);
        }
        result.push(arr);
        console.log(typeof result);//object
    }

运行代码后console.log(typeof result);//object

结果仍然是一个对象。我该如何解决这个问题?。

3 个答案:

答案 0 :(得分:1)

JavaScript中的

typeof没有人想象的那么有用。相反,您可以使用:

console.log(Array.isArray(result));

答案 1 :(得分:1)

如果look位于typeof documentation,您会看到数组始终为typeof运算符返回“object”。在javascript中,数组和对象之间的差别很小。

答案 2 :(得分:0)

事情是 - JavaScript中的数组是对象。它们从Array构造函数继承不同的方法,但检查类型将返回'object'。 您可以使用Array.isArray()方法快速检查结果是否为数组:

console.log(Array.isArray(result)); 

或者在使用旧版浏览器时使用polyfill:

function is_array(obj) {
    return  typeof obj === 'object' && obj.constructor === Array;
}

console.log(is_array(result));