2011-01-19 9 views
9

En el siguiente JSON objeto:Cómo estructurar mejor una matriz de matrices en JSON

var employees = { "accounting" : [ // accounting is an array in employees. 
           { "firstName" : "John", // First element 
            "lastName" : "Doe", 
            "age"  : 23 }, 

           { "firstName" : "Mary", // Second Element 
            "lastName" : "Smith", 
            "age"  : 32 } 
           ], // End "accounting" array.         
       "sales"  : [ // Sales is another array in employees. 
           { "firstName" : "Sally", // First Element 
            "lastName" : "Green", 
            "age"  : 27 }, 

           { "firstName" : "Jim", // Second Element 
            "lastName" : "Galley", 
            "age"  : 41 } 
           ] // End "sales" Array. 
      } // End Employees 

¿Cómo reestructurar el objeto para que pueda acceder a cada empleado Nombre de esta manera:

employees[0].firstName 
employees[1].firstName 
// etc 
+4

Esto es ** ** no un objeto JSON. Es la notación literal del objeto. http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/. Además de eso, ¿desea fusionar 'ventas' y' contabilidad' en una matriz? –

+0

Sí, quiero 1 matriz que contenga varias matrices. – Rigil

+0

En su ejemplo 'employees [0] .firstName', tiene una matriz de objetos. No es una matriz de matrices. ¿Te refieres a una matriz de objetos? –

Respuesta

16

sería necesario reestructurarlo para que eliminarían las "/ ventas contabilidad" propiedades y hacer employees una matriz de objetos.

Ejemplo:http://jsfiddle.net/hgMXw/

var employees = [ 
    { 
    "dept": "accounting", // new property for this object 
    "firstName": "John", 
    // First element 
    "lastName": "Doe", 
    "age": 23 
    }, 
    { 
    "dept": "accounting", // new property for this object 
    "firstName": "Mary", 
    // Second Element 
    "lastName": "Smith", 
    "age": 32 
    }, 
    { 
    "dept": "sales", // new property for this object 
    "firstName": "Sally", 
    // Third Element 
    "lastName": "Green", 
    "age": 27 
    }, 
    { 
    "dept": "sales", // new property for this object 
    "firstName": "Jim", 
    // Fourth Element 
    "lastName": "Galley", 
    "age": 41 
    } 
] 
+0

Esto era lo que estaba buscando. Gracias Patrick – Rigil

+0

@Rigil: De nada. – user113716

0

No puedes pivotar esto así. O mueves el departamento como una clave en el objeto empleado o tienes que acceder a él como employees.accounting [0] .firstName.

Si insiste en el acceso al empleado como empleados [índice], usted tiene que reestructurar a:

var employees = [ 
    { "firstName" : "John", "lastName" : "Doe", "age" : 23, "department" : "accounting" }, 
    { "firstName" : "...", ..., "department" : "accounting" }, 
    ... and so on. 
]; 

e introducir de una manera diferente para filtrar por departamento.

quizás cree una función que recorra la matriz de empleados, y copie cada elemento que coincida con el filtro en un nuevo objeto de matriz y lo devuelva.

function getAllEmployeesFilteredBy(filterName, filterValue, empArray) 
{ 
    var result = []; 
    for (var i=0; i < empArray.length; i++) { 
    if (empArray[i][filterName] === filterValue) 
     //by ref 
     result[result.length] = empArray[i]; 

     //or if you prefer by value (different object altogether) 
     //result[result.length] = { "firstName" : empArray[i].firstName, "lastName" : empArray[i].lastName, ... } 
    } 
    return result; 
} 
0

De jsFiddle

var employees = { "firstName" : "John", // First element 
        "lastName" : "Doe", 
        "age"  : 23 }, 

       { "firstName" : "Mary", // Second Element 
        "lastName" : "Smith", 
        "age"  : 32 } 
       ; 
alert(employees); 
+0

Si va a dar una respuesta, publíquela aquí en lugar de en otro sitio. – user113716

+0

@patrick, @fazo - Alternativamente, lo publicaría en ambos lugares en caso de que jsfiddle alguna vez pase por debajo. – ChaosPandion

+1

@Chaos: Sí, no quise no incluir un enlace, pero la respuesta debe ser presentada aquí. El otro día, jsFiddle bajó un poco y un asker necesitó hacer referencia a las soluciones en una pregunta anterior. Desafortunadamente * todas * las respuestas dadas a esa pregunta fueron enlaces jsFiddle! La utilidad de este sitio no debe estar sujeta al tiempo de inactividad de otro. – user113716

Cuestiones relacionadas