Javascript表字符串到数组

Javascript表字符串到数组,javascript,jquery,arrays,string,html-table,Javascript,Jquery,Arrays,String,Html Table,我有一个字符串,看起来像: <tr><td>Date</td><td>Value</td></tr> <tr><td>2013-01-01</td><td>231.198</td></tr> <tr><td>2013-02-01</td><td>232.770</td></tr> &

我有一个字符串,看起来像:

<tr><td>Date</td><td>Value</td></tr>
<tr><td>2013-01-01</td><td>231.198</td></tr>
<tr><td>2013-02-01</td><td>232.770</td></tr>
<tr><td>2013-03-01</td><td>232.340</td></tr>
<tr><td>2013-04-01</td><td>231.485</td></tr>
<tr><td>2013-05-01</td><td>231.831</td></tr>
<tr><td>2013-06-01</td><td>232.944</td></tr>
<tr><td>2013-07-01</td><td>233.318</td></tr>
DateValue
2013-01-01231.198
2013-02-01232.770
2013-03-01232.340
2013-04-01231.485
2013-05-01231.831
2013-06-01232.944
2013-07-01233.318
…这当然是一张桌子

我想动态地将这个字符串转换成一个包含2个数组的数组。日期之一,价值之一

[中编辑]
带有日期和值的对象数组也可以使用。

如果它是有效的html表结构,请将其包装在表标记之间,并使用jquery对其进行解析。 然后使用jquery的选择器查找列

e、 g类似的东西(伪代码,没有尝试过)

以下为:

var input = // your string

var output = $(input).slice(1).map(function(i,el) {
    var tds = $(el).find("td");
    return { "date" : tds.eq(0).text(), "value" : tds.eq(1).text() };
}).get();
…将返回以下格式的对象数组:

[{"date":"2013-01-01","value":"231.198"}, {"date":"2013-02-01","value":"232.770"}, ... ]
如果您希望将每个
视为一个数字,可以将其转换为:

    return { "date" : tds.eq(0).text(), "value" : +tds.eq(1).text() };
    // add the unary plus operator ---------------^
那么结果将是:

[{"date":"2013-01-01","value":231.198}, {"date":"2013-02-01","value":232.77}, ... ]
使用jQuery:

var table = $('<table>'+str+'</table>');
var result = {};
table.find('tr:gt(0)').each(function () {
    var date = $(this).find("td:nth-child(1)").text();
    var value = $(this).find("td:nth-child(2)").text();
    result[date] = value;
}
var表=$(''+str+'');
var result={};
表.find('tr:gt(0)')。每个(函数(){
var date=$(this.find(“td:nth child(1)”).text();
var value=$(this.find(“td:nth child(2)”).text();
结果[日期]=数值;
}

:gt(0)
跳过标题行。这将创建一个将日期映射到值的关联数组对象。假设日期是唯一的,这可能比两个数组或一个对象数组更有用。

既然您已经接受了答案,我想我应该发布一个简单的JavaScript解决方案(尽管主要是因为我花了时间在它上面,在Barmar指出您愿意并且能够使用jQuery之前):

函数单元内容(htmlStr,什么){
var_table=document.createElement('table');
_table.innerHTML=htmlStr;
变量行=_table.getElementsByTagName('tr'),
text='textContent'文档中的'textContent':'innerText',
细胞,
匹配={};
for(var w=0,wL=what.length;w

.

对于纯JavaScript解决方案,您可以尝试以下方法(假设str包含您的字符串):

var arrStr=str.replace(//g,“”)。replace(//g,“”)。split(“”);
var arrObj=[];
var arrData
对于(变量i=1;i

这是一个burte-force字符串替换/拆分,但最后,
arrObj
将有一个对象数组。

用html解析器解析它。你使用过任何库吗?jQuery可以很短地完成这项工作……还有,是否有可靠的换行符?可能是{date,value}数组对象会更有意义吗?我有jquery,但我不想使用任何额外的库,甚至不想使用jquery插件。我想保持这种轻松。@YuriyGalanter也可以。我只需要一些东西来解析它,使其成为一种可用的方式。它不是一个表,不在DOM中。它是一个从excel中动态删除的字符串文本电子表格file@DavidThomas他在评论中说他有jquery,似乎他可以使用它。@JonathanLonowski-我还没有检查这个问题的源代码,但我希望jquery在任何一种情况下都会使用相同的代码。找到它:。而且,它可能没有(像我一样多)与2.0.x和1.10.x有关,但有一点是值得关注的。谢谢!在我的情况下,这种方式是一个很好的选择。可以使用
var arrStr=str.replace(//g,“”)。replace(//g,“”)。split(“”;
var table = $('<table>'+str+'</table>');
var result = {};
table.find('tr:gt(0)').each(function () {
    var date = $(this).find("td:nth-child(1)").text();
    var value = $(this).find("td:nth-child(2)").text();
    result[date] = value;
}
function cellContents(htmlStr, what) {
    var _table = document.createElement('table');
    _table.innerHTML = htmlStr;
    var rows = _table.getElementsByTagName('tr'),
        text = 'textContent' in document ? 'textContent' : 'innerText',
        cells,
        matches = {};
    for (var w = 0, wL = what.length; w < wL; w++) {
        matches[what[w]] = [];
        for (var r = 1, rL = rows.length; r < rL; r++) {
            cells = rows[r].getElementsByTagName('td');
            matches[what[w]].push(cells[w][text]);
        }
    }
    return matches;
}

var str = "<tr><td>Date</td><td>Value</td></tr><tr><td>2013-01-01</td><td>231.198</td></tr><tr><td>2013-02-01</td><td>232.770</td></tr><tr><td>2013-03-01</td><td>232.340</td></tr><tr><td>2013-04-01</td><td>231.485</td></tr><tr><td>2013-05-01</td><td>231.831</td></tr><tr><td>2013-06-01</td><td>232.944</td></tr><tr><td>2013-07-01</td><td>233.318</td></tr>";

console.log(cellContents(str, ['dates', 'values']));
var arrStr = str.replace(/<td>/g, "").replace(/<tr>/g, "").split("</td></tr>");
var arrObj = [];
var arrData

for (var i = 1; i < arrStr.length - 1; i++) {
    arrData = arrStr[i].split("</td>");
    arrObj.push({ Date: arrData[0], Value: arrData[1] })
}