【问题标题】:Re-ordering JSON data from jQuery .getJSON()从 jQuery .getJSON() 重新排序 JSON 数据
【发布时间】:2015-10-21 18:21:48
【问题描述】:

我正在使用 $.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() 的未定义错误。

我可以将所有数组分离成它们自己的数组并将它们输出到控制台,但我不知道如何使用键值将数据推送到对象或数组。

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

【问题讨论】:

  • 你不能在tmpArray[labelKeys[i]]上调用.push(),因为它还不存在。
  • 什么意思? labelKeys[i] 将在第一次迭代后存在,并且在它确实存在之前永远不会到达第二行。我什至可以添加console.log(labelKeys[i]),它会吐出正确的键。你能再解释一下吗?

标签: javascript jquery arrays json object


【解决方案1】:

您不能在tmpArray[labelKeys[i]] 上调用.push(),因为它还不存在。在尝试调用 .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]);
        }
    }
});

【讨论】:

  • 当然!因为它是一个嵌套数组,我已经初始化了“内部”数组。呸!很高兴能得到另一双眼睛。谢谢!
  • 没错!很高兴我能帮忙:-)
  • 您不知道您的回答让您松了一口气。如此简单的解决方案,我已经盯着这个太久了。 :(
  • 很高兴我能帮上忙 :-)
猜你喜欢
  • 2017-07-13
  • 2018-02-06
  • 2023-03-17
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2012-04-07
  • 2012-09-16
相关资源
最近更新 更多