1

这可能很简单,你可能会觉得很傻,但我很难过。我正在摆弄一些 jQuery 代码,这些代码应该从 2 列 HTML 表中提取数据,然后输出两个一维数组。例如 ['sample 1','sample 2', 'sample 3'...] 用于条形标签,例如 [645, 872, 423...] 用于Chartist图表中的条形值。

编辑:我后来发现“系列”数组应该是二维的,以允许在同一个图表中显示更多数据集。如果只使用一个“系列”数据集,请将括号括起来以将其转换为数组中的数组。

我已经设法将 HTML 表值放入一个 jQuery 对象中,如下所示:

var tdata = [];
var headers = [];
$('#myTable th').each(function(index, item) {
headers[index] = $(item).html();
});
$('#myTable tr').has('td').each(function() {
var tdataItem = {};
$('td', $(this)).each(function(index, item) {
    tdataItem[headers[index]] = $(item).html();
});
tdata.push(tdataItem);
});

...其中 myTable 是一个 HTML 表格,例如:

<table id="myTable">
<tbody><tr>
<th>Oxide</th>
<th>Proportion</th>
</tr>
<tr>
<td>Ca0</td>
<td>0.73</td>
</tr>
<tr>
<td>Li2O</td>
<td>0</td>
</tr>
<tr>
<td>MgO</td>
<td>0.13</td>
</tr>
</tbody></table>

问题是我无法将第一列(在“氧化物”下)和第二列值(在“比例”下)放入它们自己的一维数组以输入 Chartist,它基本上需要这个:

var data = {
  labels: ['CaO', 'Li2O', 'MgO'],
  series: [0.73, 0, 0.13]
    ]
};

我制作了一个JSfiddle,您可以在其中看到数组的输出console.log(tdata);

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, Object]
0:
Object
Oxide:
"Ca0"
Proportion:
"0.73"
__proto__:
Object

似乎这些对象以某种方式是多维的,或者发生了一些 jQuery funkiness,因为我还没有设法为 Chartist 提取一维“标签”和“系列”数组。不过,它应该很简单?

4

1 回答 1

0

看起来你可能有数据倒退。您正在存储一个对象数组,而不是一个具有 2 个数组的对象。

我用一个创建您将用于 Chartist 的“数据”对象的示例更新了小提琴。

https://jsfiddle.net/t539uuok/1/

var data = {
    labels: [],
  series: []
};
$("#myTable tr").has("td").each(function () {
    data.labels.push($(this).find("td:first").html());
    data.series.push($(this).find("td:last").html());
});

如果您需要它是动态的,则需要进行其他更改。但是,如果您只想捕获一维标签/系列数据,这将起作用。

于 2016-05-09T15:47:20.590 回答