如何修改此方法以返回具有key =>的数组;值?

时间:2014-08-19 20:58:46

标签: javascript jquery

这是正在运行的方法,它解析所有HTML表行,并将它们插入到数组中,因此它变成了一个行数组,但只有行值,没有键:

function tableToJson(table){
    var AoA = $(table+' > tbody > tr').map(function(){
        return [
            $('td',this).map(function(){
                return $(this).text();
            }).get()
        ];
    }).get();
    return JSON.stringify(AoA);
}

输出:

[
['x','1'],
['y','2'],
['z','3']
]


我可以更改什么使它返回一个字典数组(带键和值)?

如:

[
{'address': 'x','number': '1'},
{'address': 'y','number': '2'},
{'address': 'z','number': '3'}
]



我已经尝试更换线路:
return $(this).text();
对于:return $(this).attr('name') => $(this).text();

但它没有用。

2 个答案:

答案 0 :(得分:1)

return [
    $('td',this).map(function(){
        return $(this).text();
    }).get()
];

这会生成此格式['x','1']

您可以更改它以创建结果对象,并为每个td

  • $(this).attr('name')
  • 获取密钥
  • $(this).text()
  • 获取值
  • 使用result[key] = value
  • 扩展结果对象

解决方案:

var result = {}
$('td',this).each(function(){
    var key = $(this).attr('name');
    var value = $(this).text();
    result[key] = value;
}).get()
return result;

答案 1 :(得分:1)

我认为这就是你要找的东西:

function tableToJson(table){
  var r = [];
  $(table+' > tbody > tr').each(function(){
    var e = $(this);
    r.push({address:e.attr('name'), number:e.text()});
  });
  return r;
}

当然,上面创建了一个对象数组。您可以看到他们的名称和值,如:

var tblRws = tableToJson('#tableId');
$.each(tblRws, function(i, v){
  console.log('Row:'+i+'; Address:'+v.address+'; Number:'+v.number+';');
});

我不确定你为什么要JSON.strigify()结果。如果是AJAX,则可以使用Object作为data参数。此外,您可能希望将dataType设置为您希望从服务器返回的data类型。