Tengo estos datos almacenados en 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"
}

Y estoy más interesado en esta parte

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

Estoy tratando de recuperar la parte anterior y convertirla en una matriz que se vea así

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

Los valores de arriba se convierten en las claves que forman la nueva matriz. Estoy usando este código

    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
    }

Después de ejecutar el código, console.log(typeof result);//object

El resultado sigue siendo un objeto. ¿Cómo puedo solucionar esto?

1
Le Qs 10 may. 2016 a las 23:57

3 respuestas

La mejor respuesta

La cuestión es que las matrices en JavaScript son objetos. Heredan diferentes métodos del constructor de matrices, pero al verificar el tipo se devolverá 'objeto'. Puede verificar rápidamente si su resultado es una matriz con el método Array.isArray ():

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

O use un polyfill cuando trabaje con navegadores heredados:

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

console.log(is_array(result)); 
0
Ewa 29 dic. 2017 a las 23:25

Si mire en documentación de typeof verá que las matrices siempre regresan "objeto" para el operador typeof. En javascript hay muy poca diferencia entre una matriz y un objeto.

1
David Waters 10 may. 2016 a las 21:04

typeof en JavaScript es menos útil de lo que uno podría esperar. En su lugar, puede usar:

console.log(Array.isArray(result));
1
Shaun 10 may. 2016 a las 21:01