从对象创建嵌套数组失败

Creating an nested array from an object fails

本文关键字:数组 失败 嵌套 创建 对象      更新时间:2023-09-26

我将这些数据存储在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

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

JavaScript中的

typeof没有人们希望的那么有用。相反,您可以使用:

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

如果查看typeof的文档,您会发现数组总是为typeof运算符返回"object"。在javascript中,数组和对象之间几乎没有区别。

问题是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));