如何创建一个Jquery数组对象

3

我需要以以下格式向highChart传递值:

data: [
     ['Firefox',   45.0],
     ['IE',       26.8],
]

我有一个类似于以下的表格中的值

<table>
    <tr>
        <th colspan="2">
            <div align="left">Expenditure in, or on behalf of, Scotland </div>            
        </th>
    </tr>
    <tr class="row">
        <td>Public sector debt interest</td>
        <td><?php echo $x ?>></td>
    </tr>
    <tr class="row">
        <td>Public sector debt interest</td>
        <td><?php echo $x ?>></td>
    </tr>
</table>

我试图从类似这样的表中创建数组,但是它没有起作用。

$('.row').each(function (i) {
    var data = [];
    $(this).find('td').each(function (j, v) {
        if (j == 0)
            var label = $(this).html();
        else {
            var val = $(this).html();
            data[label] = val;
        } 
    });
});

请问有人能帮我找出我的错误吗?

先行致谢。

2个回答

2
你试图创建的数据结构是包含数组的数组。这是JS原生构造,与jQuery无关。你遇到的问题是,你试图通过提供键/值对来创建数组项,这对于对象来说很好,但在这里不起作用。
首先,父数组需要在 each 之外定义。然后,你需要为每一行创建一个新数组,并将其推送到父数组中。你不需要循环遍历 td 元素,因为你需要同时获取它们以创建数组项。尝试使用以下代码:
var data = [];
$('.row').each(function (i) {
    var label = $(this).find('td').eq(0).text(); // get value of the first td as a number
    var value = parseFloat($(this).find('td').eq(1).text()); // and the second
    data.push([label, value]); // add the new item to the array
});

Example fiddle


我尝试将数组实现到脚本中,但它抛出错误。http://jsfiddle.net/n48w6rt3/1/ - Vikram Anand Bhushan
你的HTML代码有错误,因为table标签在script标签内部 - Rory McCrossan
非常感谢,我试图添加表格的实际内容,由于您还将标签更改为浮点值,因此名称未显示出来,我将其更改为普通字符串,但是图表的大小变得非常小,您能帮我修复一下吗? http://jsfiddle.net/n48w6rt3/3/ - Vikram Anand Bhushan
@Vikram 啊,是的,抱歉我的错 :D - Rory McCrossan
我也在尝试使用类似的表格添加图表的另一半,是否可以在同一个脚本中完成? - Vikram Anand Bhushan

1
您在回调函数内声明了变量data。这意味着它将为每一行重新创建,并且在循环遍历所有行后将不可用。请将其声明在循环外部。
您以属性的形式将值放入变量中,而不是数组项。这意味着数组仍为空。创建一个数组,并添加到数组data中。
您在内部each的回调函数中声明变量label,因此当回调第二次为第二个单元格调用时,它将消失并被重新创建。请在该循环之外声明label以保持调用之间的值。
结果应该是数字,而不是字符串,因此您应该解析它。
var data=[];
$('.row').each(function (i) {
  var label, val;
  $(this).find('td').each(function (j, v) {
    if (j == 0) {
      label = $(this).html();
    } else {
      val = parseFloat($(this).html());
      data.push([ label, val ]);
    } 
  });
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接