Как лучше структурировать массив массивов в JSON - PullRequest
9 голосов
/ 19 января 2011

В следующем объекте 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

Как мне реструктурировать объект, чтобы я мог получить доступ к имени каждого сотрудника следующим образом:

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

Ответы [ 3 ]

16 голосов
/ 19 января 2011

Потребуется реструктурировать его, чтобы исключить свойства «учета / продаж» и сделать employees Массив объектов.

Пример: 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 голосов
/ 19 января 2011

С jsFiddle

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

                { "firstName" : "Mary",  // Second Element
                  "lastName"  : "Smith",
                  "age"       : 32 }
                 ;
alert(employees);
0 голосов
/ 19 января 2011

Вы не можете повернуть это так.Либо вы перемещаете отдел в качестве ключа в объекте сотрудника, либо вам необходимо получить к нему доступ, как employee.accounting [0] .firstName.

Если вы настаиваете на доступе к сотруднику в качестве сотрудников [index], вы должныреструктурируйте его так:

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

и представьте другой способ фильтрации по отделам.

возможно, создайте функцию, которая перебирает массив сотрудников, и скопируйте каждый элемент, соответствующий фильтру, вновый объект массива и вернуть его.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...