JQuery数组重新安排JSON对象

时间:2012-02-09 08:38:40

标签: javascript jquery arrays object

我想隐瞒这个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 个答案:

答案 0 :(得分:3)

ids来自哪里?测试以下脚本,您的数组位于aData,结果将位于aNewData

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

另见this example

答案 1 :(得分:0)

您可以通过折叠轻松转换这些数据:

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

这将基本上与scessor的for循环相同,但是以更加以数据为中心的方式。

这样想:

  1. 您保存源数据(包含所有“api *”字符串的数组)

  2. 您创建一个新的结果数组[](作为第二个参数传递给reduce),应该作为下一个结果返回。

  3. 将一个未命名的函数传递给reduce,每次调用时都会调用3个参数,即result,这是您最近创建的数组,name每个“api *”字符串的值,以及index,这是原始数组中这些字符串的索引。

  4. 您可以连续查看每个“api *”字符串,并将包含所需数据的新对象放入其中。由于result.concat将返回整个数组,您只需添加

  5. 将返回包含所有数据的result数组。

  6. 但是,如果您希望向后兼容旧浏览器,我建议您使用underscore.js