Задача такая:
var streak = {
min: '',
max: '',
length: '',
series: []
}
var allStreaks = []
У меня есть массив чисел:
var arr = [19, 20, 21, 22, 17, 18, 19, 7, 8, 9]
Мне нужно распределить их по массивам чтобы в нем были эти числа в порядке возрастания, и записать все это в таком формате:
[{
min: 19,
max: 22,
length: 4,
series: [19, 20, 21, 22]
}, {
min: 17,
max: 19,
length: 3,
series: [17, 18, 19]
}, {
min: 7,
max: 9,
length: 3,
series: [7, 8, 9]
}]
В исходном массиве числа идут в том порядке в котором они мне нужны будут (как будто если бы эти числа шли по датам - одно число - один день) Мне нужно отловить сколько "дней" эти числа увеличивались, с какого числа началось и на каком остановилось и потом все сначала. Первые 4 числа массива arr (19 20 21 22) должны создать объект в котором будет записано минимальное число (19), максимальное число (22), сколько всего чисел было записано (4) и собственно сам массив этих чисел [19, 20, 21, 22]. Точно так же со вторым возрастающим стриком с 17 до 19 итд
Числа в исходном массиве абсолютно рандомные и нужно отследить эту череду увеличений и как только встречается число меньше предыдущего начать новый массив
На данный момент делаю так:
for (var i = 0; i < arr.length-1; i++) {
if (arr[i] < arr[i+1]) {
streak.series.push(arr[i])
} else {
streak.series.push(arr[i]) //Сохранит последний элемент первого стрика
break;
}
}
Так я успешно получаю первый стрик, однако если мне надо продолжить, то возникают трудности:
for (var i = 0; i < arr.length-1; i++) {
if (arr[i] < arr[i+1]) {
streak.series.push(arr[i])
} else if ((arr[i] > arr[i-1]) && (arr[i] > arr[i+1])) {
streak.series.push(arr[i]) // Это ловит и записывает последний элемент первого стрика, получается steak.series = [19,20,21,22]
// но он на этом не останавливается и продолжает записывать все числа исходного массива
// так как они потом подходят под первый if (arr[i] < arr[i+1])
// и в результате у меня просто переписывается весь исходный массив
} else {continue;}
}
Ответ
var arr = [19, 20, 21, 22, 17, 18, 19, 7, 8, 9]
var resArr = [];
var min = max = length = 0;
var tempArr = [];
var prev = 0;
arr.forEach(function(item) {
if(prev > item && prev){
resArr.push({'min':min,'max':max,'length':length, 'series':tempArr});
min = 0;
max = 0;
tempArr = [];
length = 0;
}
if(item > max) max = item;
if(item < min || min == 0) min = item;
length++;
tempArr.push(item);
prev = item;
});
resArr.push({'min':min,'max':max,'length':length, 'series':tempArr});
console.log(resArr);
Комментариев нет:
Отправить комментарий