2013-07-01 4 views
0

У меня есть диаграмма, которая обновляется с текущими ценами на биткойн, однако дата и время на оси х неверны. Он всегда начинается 31 декабря, 19:00. В моей консоли я получаю правильную дату и время, но я не могу заставить его отображаться правильно на диаграмме. Я почти уверен, что мне нужно вставить один массив в другой. Любая помощь приветствуется, спасибо.Как поместить массив в другой массив?

$.ajax({ 
     url: "/chart/ajax_get_chart", // the URL of the controller action method 
     dataType: "json", 
     type: "GET", 
     success: function (result) { 
      var result = JSON.parse(result); 
      series = []; 
      for (var i = 0; i < result.length; i++) { 
      tempDate = Date.parse(result[i]['date']); 
      tempArray = [parseFloat(result[i]['price'])]; 
      var date = new Date(); 
      tempDate = date.toString(); 
      series.push(tempArray); 
      var tempDate = tempDate.concat(tempArray); 
      } 
+0

Так когда же числа или строки имеют 'concat' метод? – Ian

+0

Вы добавляете массив, как вы добавляете любое другое значение. –

+0

@Ian: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat. –

ответ

1

Если я правильно понял, то для каждого i:

  • result[i]['date'] дает дату в положении i
  • result[i]['price'] дает цену на позиции i

Теперь в первую очередь, давайте посмотрим на ваш цикл:

for (var i = 0; i < result.length; i++) { 

     //Here you grab the date from the result array 
     tempDate = Date.parse(result[i]['date']); 

     //Here you grab the price from the result array and parse it to a float 
     tempArray = [parseFloat(result[i]['price'])]; 

     //Here you grab the current date (of today) 
     var date = new Date(); 

     //Here you overwrite the 'grabbed date' with the current date (of today) 
     tempDate = date.toString(); 

     //Here you add the price at position i to the 'result array' called series 
     series.push(tempArray); 

     //Here you join tempArray with the tempDate 
     var tempDate = tempDate.concat(tempArray); 
     } 

Так что же происходит не так?

Ну я приготовил для вас JsFiddle: http://jsfiddle.net/KzLFr/1/

Посмотрите внимательно на код и что именно «показывает вверх» в окне предупреждения. Вы видите, что значение tempDate перезаписывается текущей датой. Применяя эту информацию к вашему циклу: вы увидите, что для каждой итерации вы перезаписываете дату, которую вы берете из массива result с текущей датой.

Это означает, что «фактические» даты (от result[i]['date']) всегда переписывается, следовательно, если бы вы добавить все tempDates в массив на каждой итерации, вы будете в конечном итоге с массивом, состоящей из result.length раза текущей даты ,

Еще один интересный момент - ваше утверждение: var tempDate = tempDate.concat(tempArray); Как вы можете видеть во втором поле оповещения в JsFiddle, это создаст массив, который имеет два массива друг за другом. Но почему в мире вы бы сделали это на каждой итерации?

Кроме того, вы никогда не делали do что-то с вашими датами. Вы не добавляете их в массив или что-то еще: вы просто создаете их, а затем оставляете их в покое.

Это задает вопрос: что именно вы хотите сделать?

Поэтому:

ПРИМЕЧАНИЕ: Может быть, я ошибаюсь, но если я правильно вы хотите, чтобы в конечном итоге с массивом, который содержит x-axis информацию и y-axis информацию о. Потому что это не ясно из вашего вопроса и вашего кода, как вы хотите это сделать, я могу только догадываться.

Итак, угадав, что вы хотите, чтобы в конечном итоге, я бы переписать петлю следующим образом:

var dateData = []; 
var priceData = []; 

for(var i = 0; i < result.length; i++){ 
    dateData.push(result[i][0]); 
    priceData.push(result[i][1]); 
} 

Вы можете увидеть, как это работает здесь: http://jsfiddle.net/WT58s/1/

Если это не поможет решить проблема, пожалуйста, объясните, с чем вы хотите закончить (двухмерный массив или два разных массива?), поэтому мы можем помочь вам лучше.

Кроме того, часто при загрузке информации из Интернета информация хранится в обратном порядке; поэтому начинаем с текущей даты, а затем идем назад во времени.

Попытайтесь проверить, так ли это в случае с вашими данными. Если это действительно так, то вы можете прочитать о движении задним ходом здесь:

Reverse order of elements in 2-dimensional array

+0

Спасибо за подробное объяснение вашего ответа. Я хочу, чтобы текущее время отображалось на оси x диаграммы. Когда я console.log, текущее время правильно отображается в моей консоли. Но я не могу заставить его правильно показать на диаграмме. – evann

+0

@evann: Можете ли вы дать ссылку на плагин, который вы используете? –

Смежные вопросы