2014-01-17 2 views
1

У меня есть JSON закодированного массив с 5000 строками все выглядит как следующее:Перестановка элементов массива в двух новых массивы

[2013-01-01 07:00, 10, 50] 

Для того, чтобы нарисовать jqplot с двумя осей у, мне нужно, чтобы получить два различные массивы из этого один, похожий на следующее:

array1: [2013-01-01 07:00, 10] 
array2: [2013-01-01 07:00, 50] 

то, что я пытался это следующий подход, но это не кажется, работает хорошо:

var data= <?php echo json_encode($dataarray); ?>; 
var array1= []; 
var array2 = []; 

for(var i=0, len=data.length; i<len; i++){ 
    array1[i] = array1[i][0]+array1[i][1]; 
    array2[i] = array2[i][0]+array2[i][2]; 
}; 

Может ли кто-нибудь помочь или есть еще более простой способ рисовать график с двумя-осями с моим исходным массивом, без необходимости разбивать элементы массива?

+0

Можете ли вы предусмотрели несколько строк вашего входного примера – musefan

+0

'array1.push (array1 [I] [0]) нажмите (array1 [. я] [1]); '? – Beterraba

ответ

2

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

var data = [ 
    ['2013-01-01 07:00', 10, 50], 
    ['2013-01-01 08:00', 20, 70] 
] 

var array1 = data.map(function(item){ return [item[0], item[1]]}); 
var array2 = data.map(function(item){ return [item[0], item[2]]}); 

В качестве альтернативы, вы можете изменить свой оригинальный подход:

var array1 = []; 
var array2 = []; 

for(var i=0, len=data.length; i<len; i++){ 
    array1.push([data[i][0], data[i][1]]); 
    array2.push([data[i][0], data[i][2]]); 
}; 

Наконец, я думаю, что массивы обычно лучше хранить одинаковые предметы. Ваши исходные данные могут быть лучше подобраны таким образом:

var data = [ 
    { date: '2013-01-01 07:00', first : 10, second: 50}, 
    { date: '2013-01-01 07:00', first : 20, second: 70} 
] 

То же решение работает с незначительными изменениями.

+0

Это жизнеспособное решение, конечно, это означает, что вам нужно пройти массив дважды, задавая сложность времени O (2n), что, безусловно, может быть улучшено, если вы используете более ручной подход. –

+0

@MikeBrant Вы правы, что там есть производительность, хотя O (2n) === O (n). Снижение производительности - это дополнительное сравнение и добавление, которое для 5000 элементов, упомянутых в вопросе, является незначительным. – Tibos

+0

Ваш подход O (n) должен получить данные из 2-го измерения массива данных (т. Е. 'Data [i] [0]') –

0

Здесь O (п) сложность подход:

var data= <?php echo json_encode($dataarray); ?>; 
var array1 = []; 
var array2 = []; 

var len = data.length; 
for (i = 0; i < len; i++) { 
    array1.push([data[i][0], data[i][1]]); 
    array2.push([data[i][0], data[i][2]]); 
} 
Смежные вопросы