开发者

Filtering data in an array

I have an array that has 30 date objects. The date objects are indexed in the array from the minimum date value to the maximum date value. What I would like to do is retrieve only 7 dates from the array. Out of the 7, the firs开发者_开发百科t one should be the minDate and the last should be the maxDate, with 5 dates in the middle. The 7 numbers should increment evenly from the minDate to the maxDate. How would I accomplish this? Hope I was clear.

Thanks, Tonih


well if you were trying to evenly distribute by date then make sure all your objects are in the date class then do array[29].getTime()-array[0].getTime() /7 for your average step, then do something like array.forEach() with a comparason function to try and get the closest to each step.

--edit--

try something like:

//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;
    }
}

of course this is dealing with a preumed even spread of dates, there could be the posibility of adding the same date to several different points if all of dateArray are clumped together, could be optimised, but see what you can do with it.

i havnt tested this code, but it should work pretty out of the box. have a look at these if you have a problem:

Array::forEach()

Date::getTime()

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜