хорошо, если вы пытались равномерно распределить по дате, убедитесь, что все ваши объекты находятся в классе даты, а затем выполните array [29] .getTime () - array [0] .getTime () / 7 для вашего среднего шага, затем сделайте что-то вроде array.forEach () с функцией сравнения, чтобы попытаться найти самый близкий к каждому шагу.
- изменить -
попробуйте что-то вроде:
//dateArray is array of dates
var targetTime:Number;
var filteredarray:Array = new Array();
var step = dateArray[29].getTime()-dateArray[0].getTime() /7
var smallestdist:Number;
var currentIndex:int;
filteredarray.push(dateArray[0]); //Add the first entry
targetTime = dateArray[29].getTime(); //set the lowest point
for(var i=1; i<7; i++){ //loop 6 more times
smallestdist = Number.POSITIVE_INFINITY; //set a large smalldist
currentIndex = 0; //Set a small index
targetTime += step; //increment the target time
dateArray.forEach(testDate); //loop through the array and test with testDate function
filteredarray[i] = dateArray[currentIndex] //Add the result to the dateArray
}
function testDate(item:Date, index:int, array:Array){
//Check the absolute value against current stored distance
if(Math.abs(item.getTime() - targetTime) < smallestdist){
//if less then set this as new target
smallestdist = Math.abs(item.getTime() - targetTime);
currentIndex = index;
}
}
конечно, это имеет дело с предполагаемым равномерным разбросом дат, может быть возможность добавления одной и той же даты к нескольким различным точкам, если все dateArray объединены, могут быть оптимизированы, но посмотрите, что вы можете с этим сделать .
Я тестировал этот код, но он должен работать довольно из коробки. посмотрите на это, если у вас есть проблема:
Массив :: Foreach ()
Date :: GetTime ()