2015-01-29 10 views
3

я должен передать значения в highChart в следующем форматеКак создать массив объектов Jquery

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

Структура данных вы пытаетесь создать массив, содержащий массивы. Это родная конструкция 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

+0

Я попытался реализовать массив в сценарии, но это trhows ошибка http://jsfiddle.net/n48w6rt3/1/ – Vikram

+0

Ваш HTML неверен, как 'table' находится внутри' script' тега –

+0

Исправлено: http://jsfiddle.net/n48w6rt3/2/ Я также обновил свой ответ для вас –

1

Вы объявляете переменную data внутри функции обратного вызова. Это означает, что он будет воссоздан для каждой строки и что он не будет доступен после того, как вы зациклируете все строки. Объявите его вне цикла.

Вы помещаете значения в переменную в виде свойства, а не элемента массива. Это означает, что массив все еще пуст. Создайте массив и добавьте в массив data.

Вы объявляете переменную label внутри функции обратного вызова для внутреннего each, поэтому она будет удаляться и воссоздаваться, когда обратный вызов называется вторым временем для второй ячейки. Объявите 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 ]); 
    } 
    }); 
}); 
Смежные вопросы