2014-09-10 2 views
0

Есть ли лучший способ получить объект bio в нажатой диаграмме values?JS: отображение массива внутри нажатия

// date and value keys. 
var data = {"1":[{"date":"2014-03-10","value":14},{"date":"2014-03-17","value":15},{"date":"2014-03-19","value":13},{"date":"2014-04-11","value":11},{"date":"2014-04-13","value":13.7},{"date":"2014-04-14","value":14.6},{"date":"2014-04-15","value":17},{"date":"2014-04-17","value":9},{"date":"2014-04-20","value":10},{"date":"2014-04-21","value":17},{"date":"2014-04-24","value":15},{"date":"2014-05-02","value":10},{"date":"2014-05-03","value":95.3},{"date":"2014-05-09","value":92.1},{"date":"2014-05-12","value":3},{"date":"2014-05-14","value":88.9},{"date":"2014-05-15","value":95.3},{"date":"2014-05-23","value":82.6},{"date":"2014-05-24","value":95.3},{"date":"2014-05-30","value":99},{"date":"2014-05-31","value":88.9},{"date":"2014-06-01","value":80},{"date":"2014-06-17","value":82},{"date":"2014-07-08","value":95},{"date":"2014-07-30","value":127},{"date":"2014-08-02","value":90},{"date":"2014-08-03","value":80},{"date":"2014-08-09","value":82}],"2":[{"date":"2014-03-10","value":"1"},{"date":"2014-03-19","value":"23"},{"date":"2014-04-11","value":"14"},{"date":"2014-04-13","value":"14.4"},{"date":"2014-04-14","value":"14"},{"date":"2014-04-21","value":"11"},{"date":"2014-04-24","value":"13.5"},{"date":"2014-05-04","value":"4"},{"date":"2014-05-15","value":"15"},{"date":"2014-05-17","value":"16"},{"date":"2014-05-23","value":"9.3"},{"date":"2014-05-24","value":"11"},{"date":"2014-05-25","value":"14.9"},{"date":"2014-06-01","value":"14.1"}]}; 

var bio = []; 
$.each(data['1'], function(date, value) { 
    bio.push({x: value['date'], y: Math.round(value['value'])}); 
}); 

chart = []; 
chart.push({ 
    area: true, 
    color: '#FFBA78', 
    values: bio, 
}); 

В основном то, что я делаю принимает данные [ «1»] массив, и для каждого узла, я меняю ключи: date в x и value в y. Я думаю, что это возможно с помощью карты массива? Что-то вроде:

chart.push({ 
    area: true, 
    color: '#FFBA78', 
    values: data['1'].map(function() { ... }), 
}); 

Here's a JSFiddle.

+0

* «... и для каждого узла я меняю ключи:' date' на 'y' и' values' на 'x' ... * * Нет, вы меняете' date' в ** 'x' **, и если у вас есть ключ' values' в 'data', я не вижу в нем цитируемые данные. –

ответ

1

Если текущий код работает, то вы совершенно правы, что $.map может сделать ту же работу:

chart.push({ 
    area: true, 
    color: '#FFBA78', 
    values: $.map(data[1], function(entry) { 
     return {x: entry.date, y: Math.round(entry.value)}; 
    }) 
}); 

Updated Fiddle

Или с помощью Array#map от ES5 (который можно открепить на старых браузерах):

chart.push({ 
    area: true, 
    color: '#FFBA78', 
    values: data[1].map(function(entry) { 
     return {x: entry.date, y: Math.round(entry.value)}; 
    }) 
}); 

Updated Fiddle

1

Использование ES5 Array.prototype.map:

data['1'].map(function(item){ return {x: item.date, y: Math.round(item.value)} }) 

Где item представляют date, value объект в массиве.

Важно: это будет работать на IE9 +, если вам это нужно для работы в старой версии IE, пожалуйста, следуйте инструкциям по заполнению полиса here.

Вы также можете проверить некоторые из benchmakrs производительности между 2 здесь:

http://jsperf.com/jquery-map-vs-array-map

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

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