Это ответ на месяцы, только если кому-то нужно: D
let new_range = {};
_.forEach(labels, function(value, key) {
new_range[moment(value).format('YYYY MM')] = [];
});
_.forEach(labels, function(value, key) {
new_range[moment(value).format('YYYY MM')].push(data[key]);
});
let new_labels = Object.keys(new_range);
let new_data = [];
_.forEach(new_range, function(value, key) {
new_data.push(_.sumBy(value, function(n) {return n;}));
});
return {data: new_data, labels: new_labels};
И после целого дня вот один на реальные недели:
const range = ['2019-01-22', '2019-01-23', '2019-01-24', '2019-01-25', '2019-01-26', '2019-01-27', '2019-01-28', '2019-01-29', '2019-01-30', '2019-01-31', '2019-02-01', '2019-02-02', '2019-02-03', '2019-02-04', '2019-02-05', '2019-02-06', '2019-02-07', '2019-02-08', '2019-02-09', '2019-02-10', '2019-02-11', '2019-02-12', '2019-02-13', '2019-02-14', '2019-02-15', '2019-02-16', '2019-02-17', '2019-02-18', '2019-02-19', '2019-02-20', '2019-02-21', '2019-02-22', '2019-02-23', '2019-02-24', '2019-02-25', '2019-02-26', '2019-02-27', '2019-02-28', '2019-03-01'];
const backup = ['2019-01-22', '2019-01-23', '2019-01-24', '2019-01-25', '2019-01-26', '2019-01-27', '2019-01-28', '2019-01-29', '2019-01-30', '2019-01-31', '2019-02-01', '2019-02-02', '2019-02-03', '2019-02-04', '2019-02-05', '2019-02-06', '2019-02-07', '2019-02-08', '2019-02-09', '2019-02-10', '2019-02-11', '2019-02-12', '2019-02-13', '2019-02-14', '2019-02-15', '2019-02-16', '2019-02-17', '2019-02-18', '2019-02-19', '2019-02-20', '2019-02-21', '2019-02-22', '2019-02-23', '2019-02-24', '2019-02-25', '2019-02-26', '2019-02-27', '2019-02-28', '2019-03-01'];
const data = [5,2,3,1,5,5,2,3,1,5,5,2,3,1,5,5,2,3,1,5,5,2,3,1,5,5,2,3,1,5,5,2,3,1,5,5,2,3,1];
console.log(bindData(data, backup, getWeeks(range)));
function bindData(data, range, labels) {
let new_data = {};
Object.keys(labels).forEach(function(val) {
let count = 0;
for(let j = 0; j<labels[val].length; j++) {
for(let i = 0; i<range.length; i++) {
if(labels[val][j] == range[i]) {
count = count + data[i];
}
}
}
new_data[val] = count;
});
return new_data;
}
function getWeeks(labels) {
let start = moment(labels[0]);
let new_range = {};
var arr = [];
let tmp = start.clone().day(7);
let sunday = tmp.format('YYYY-MM-DD');
let sunday_index = labels.indexOf(sunday);
if(sunday_index === -1) {
new_range[sunday] = labels;
}else{
let first_week = labels.slice(0, sunday_index + 1);
new_range[first_week[first_week.length - 1]] = first_week;
labels.splice(0, sunday_index + 1);
let last_days = labels.length % 7;
if(last_days != 0) {
let last_week = labels.splice(labels.length - last_days, last_days);
new_range[last_week[last_week.length - 1]] = last_week;
}
for(let i = 0; i<labels.length; i++) {
let a = 0;
new_range[labels[6]] = labels.splice(a, 7);
}
}
return new_range;
}
Теперь по какой-то причине мне нужноиметь массив двойных меток, если бы я использовал один из них, я бы получил пустой массив в функции bindData
.Если ты знаешь почему.Отредактируйте его.