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] })
}