【问题标题】:data transformation from one form of array to another从一种形式的数组到另一种形式的数据转换
【发布时间】:2012-08-03 14:22:39
【问题描述】:

我对从一种形式的数组到另一种形式的数据结构转换存有疑问。

我的输入数据是这样的,

var testVar=[

{
    "count": 1,
    "term": "Company",
    "Company": [
        {
            "Tata": [
                {
                    "count": 1,
                    "term": "Tatagroup"
                }
            ],
            "sector": "Automotive",
            "type": "Car"
        },
      ]
},
{
    "count": 2,
    "term": "Country",
    "Country": [
        {
            "France": [
                {
                    "count": 1,
                    "term": "France"
                }
            ],
            "region": "Europe",
            "Player": "Zidane",
            "term": "France",
            "code": "FRA"
        },
        {
            "region": "Europe",
            "Player": "Federer",
            "term": "Switzerland",
            "Switzerland": [
                {
                    "count": 1,
                    "term": "Switzerland"
                }
            ],
            "code": "SWI"
        }
    ]
}];

我正在尝试将其转换为表单,

[ "Tata" : [{"sector" : "automotive"}, "type" : "car"], "France": [{"region" : "Europe}, {"Player" : "Zidane"} , {"code" : "FRA"}], "switzerland" : [{"region" : "Europe}, {"Player" : "Federer"} , {"code" : "SWI"}]];

我想出的代码看起来像http://jsfiddle.net/X2apw/2/,bt 它不准确..

【问题讨论】:

  • 你想要的结果不是 JSON
  • 首先:它坏了——["Tata":[]] 会给你一个错误。 { "Tata" : [] } 是可以接受的。和[{"Tata":[]}] 一样。你现在得到的是一大堆损坏的 JSON。 ["type":"car"] 也是如此。同样,{"type":"car"}[{"type":"car"}]。第二……你为什么要这样做?即使你做对了,为什么要选择像parsedData[0].Tata[1].type; parsedData[1].France[0].region; parsedData[1].France[1].Player; parsedData[2].switzerland[2].code; 这样的对象?不知道哪个术语在哪个对象中的哪个数组中的哪个点有什么好处?

标签: javascript jquery arrays


【解决方案1】:
var testvar = [...];

var result = {};
for (var i=0; i<testvar.length; i++) {
    var arr = testvar[i][testvar[i].term];
    for (var j=0; j<arr.length; j++) {
        var resarr = [];
        for (var k in arr[j]) {
            if (typeof arr[j][k] == "string") {
                 var obj = {};
                 obj[k] = arr[j][k];
                 resarr.push(obj);
            } else {
                 result[k] = resarr;
            }
        }
    }
}

(Demo at jsfiddle.net)

但是,我强烈建议您在结果格式中只使用一个对象而不是一组单一属性对象。将内部循环体更改为:

        var resobj = {};
        for (var k in arr[j]) {
            if (typeof arr[j][k] == "string") {
                 resobj[k] = arr[j][k];
            } else {
                 result[k] = resobj;
            }
        }

(Demo)

【讨论】:

  • 谢谢...我正在尝试将数据转换为这种格式,因为当我输入瑞士时,我需要与瑞士相关的所有详细信息,关键字段可能因不同的实体而异,我是尝试访问此实时
猜你喜欢
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2023-04-01
  • 1970-01-01
  • 2015-01-26
相关资源
最近更新 更多