我正在使用$ .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()的未定义错误。
我可以将所有数组分离到自己的数组中并将它们输出到控制台,但我无法弄清楚如何使用键值将数据推送到对象或数组。
如何将值推送到对象,以便我可以遍历数组并将对象分组到相同的编号位置,并将其分配给位于第一个数组中相同位置的键?
答案 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]);
}
}
});