2011-01-19 15 views
9

W poniższym obiekt JSON:Jak lepiej zorganizować tablicy tablic w 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 

Jak zrestrukturyzować obiektu, dzięki czemu można uzyskać dostęp do każdego pracownika najpierw nazwać tak:

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

to nie ** ** obiekt JSON. Jest to literalna notacja obiektowa. http://benalman.com/news/2010/03/theres-no-such-thing-as-a-json/. Poza tym, czy chcesz połączyć 'sales' i' accounting' w jedną tablicę? –

+0

Tak, chcę 1 tablicę, która zawiera kilka tablic. – Rigil

+0

W twoim przykładzie 'employees [0] .firstName', masz jedną tablicę obiektów. Nie tablica tablic. Masz na myśli szereg obiektów? –

Odpowiedz

16

To wymagałoby jej restrukturyzacji tak, że chcesz wyeliminować „/ sprzedaży rachunkowości” właściwości i dokonać employees tablicę obiektów.

przykład: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

Tego właśnie szukałem. Dzięki Patrick – Rigil

+0

@Rigil: Nie ma za co. – user113716

0

Nie możesz tego obrócić w ten sposób. Możesz przenieść dział jako klucz do obiektu pracownika lub musisz uzyskać do niego dostęp, np. Employees.accounting [0] .firstName.

Jeśli domagać się dostępu do pracownika jako pracownicy [indeks], trzeba zrestrukturyzować go do:

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

i wprowadzić inny sposób filtrowania przez dział.

może utworzyć funkcję przechodzącą przez tablicę pracowników i skopiować każdy element pasujący do filtru do nowego obiektu tablicy i zwrócić go.

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

Z jsFiddle

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

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

Jeśli chcesz udzielić odpowiedzi, opublikuj ją tutaj, zamiast na innej stronie. – user113716

+0

@patrick, @fazo - Ewentualnie zamieściłbym go w obu miejscach, na wypadek gdyby jsfiddle kiedykolwiek trafił pod. – ChaosPandion

+1

@Chaos: Tak, nie chciałem w ogóle dodawać linku, ale odpowiedź powinna być tutaj przedstawiona. Któregoś dnia, jsFiddle był już na dole, a osoba pytająca musiała odwołać się do rozwiązań z poprzedniego pytania. Niestety * wszystkie * odpowiedzi na to pytanie zawierały linki jsFiddle! Użyteczność tej strony nie powinna być przedmiotem przestojów innej. – user113716

Powiązane problemy