从jQuery重新排序JSON数据.getJSON()

时间:2015-10-21 18:21:48

标签: javascript jquery arrays json object

我正在使用$ .getJSON从数据源中提取一些数据,结果以JSON形式出现,但它采用这种格式(因为它来自表格):

result {
    0: Array {
       0: 'First Name',
       1: 'Last Name',
       2: 'City', 
       3: 'State'
    }
    1: Array {
       0: 'John',
       1: 'Doe',
       2: 'Portland',
       3: 'Oregon'
    }
    2: Array {
       0: 'Jane',
       1: 'Doe',
       2: 'Seattle',
       3: 'Washington'
    }
}

我需要将这些数据变成看起来更像这样的东西:

Object {
    'First Name': 'John', 'Jane'
    'Last Name': 'Doe', 'Doe'
    'City': 'Portland', 'Seattle'
    'State': 'Oregon', 'Washington'
}

我认为我只是把它们放到几个$ .each()循环中但我似乎无法得到一个对象,第一个数组的值作为键,匹配值作为分配给它的数组中的项键。我尝试过这样的事情:

var tmpArray = [];
var labelKeys = [];
$.each(result, function(key, val){
    if (key < 1){
        $.each(val, function(labelKey, labelVal){
           labelKeys.push(labelVal);
        }
    } else {
        for (var i=0; i<labelKeys.length;i++){
            tmpArray[labelKeys[i]].push(val[i]);
        }
    }
}

这不起作用,我得到push()的未定义错误。

我可以将所有数组分离到自己的数组中并将它们输出到控制台,但我无法弄清楚如何使用键值将数据推送到对象或数组。

如何将值推送到对象,以便我可以遍历数组并将对象分组到相同的编号位置,并将其分配给位于第一个数组中相同位置的键?

1 个答案:

答案 0 :(得分:1)

您无法在.push()上致电tmpArray[labelKeys[i]],因为它尚未存在。在尝试调用.push()之前,您需要将该键添加到对象。

// this needs to be an object
// arrays can only have numeric keys
var tmpArray = {};
var labelKeys = [];

$.each(result, function(key, val){
    if (key < 1){
        $.each(val, function(labelKey, labelVal){
           labelKeys.push(labelVal);
           // Create an array for this label
           tmpArray[labelVal] = [];
        });
    } else {
        for (var i=0; i<labelKeys.length;i++){
            tmpArray[labelKeys[i]].push(val[i]);
        }
    }
});