JQuery Array To Переупорядоченный объект JSON - PullRequest
1 голос
/ 09 февраля 2012

Я хочу преобразовать этот массив JavaScript


    [
      "Data",
          [
                "API",
                "Apiales",
                "Apiaceae",
                "Apia",
          ]
      ]

в этот переставленный формат json


    [
     {"name":"API","id":"1"},
     {"name":"Apiales","id":"1"},
     {"name":"Apiaceae","id":"1"},
     {"name":"Apia","id":"1"}
    ]

Спасибо

обновление: я пробовал это

var aNewData =[];
             for(i in aData[1]){
             var item={};
             item.name = aData[1][i];
             item.id = "1";
             aNewData[i]=item;
            }

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Откуда берутся идентификаторы? Протестируйте следующий скрипт, ваш массив будет в aData, а результат будет в aNewData:

var aNewData = [];
for (var i = 0; i < aData[1].length; i++) {
    aNewData.push({
        "name": aData[1][i],
        "id": 20 + i
    });
}

Также см. этот пример .

0 голосов
/ 09 февраля 2012

Вы можете легко преобразовать эти данные путем свертывания:

var sourceData  = ["API","Apiales","Apiaceae","Apia"];
var transformed = sourceData.reduce(function(result, name, index) {
  return result.concat({
    name: name,
    id: 20 + index
  });
}, []);

Это даст вам то же самое, что и цикл for scessor, но в большей степени ориентированный на данные.

Думайте об этом так:

  1. Вы храните исходные данные (массив со всеми этими строками "api *")

  2. Вы создаете новый результирующий массив [] (переданный как 2-й аргумент reduce), который должен быть возвращен как ваш следующий результат.

  3. Передать безымянную функцию в reduce, которая будет вызываться с 3 аргументами, каждый раз, когда она вызывается, а именно result, который является недавно созданным вами массивом, name значение каждого из них " api * "строки и index, который является индексом этих строк в исходном массиве.

  4. Вы последовательно просматриваете каждую из этих строк «api *» и помещаете в нее новый объект, содержащий нужные данные. Поскольку result.concat вернет весь массив, вы просто добавляете эти

  5. Будет возвращен массив result, содержащий все ваши данные.

Но на тот случай, если вы хотите иметь обратную совместимость со старыми браузерами, я бы порекомендовал использовать для этого underscore.js .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...