Фильтрация данных в массиве - PullRequest
0 голосов
/ 22 апреля 2010

У меня есть массив, который имеет 30 объектов даты. Объекты даты индексируются в массиве от минимального значения даты до максимального значения даты. Что я хотел бы сделать, это получить только 7 дат из массива. Из 7 первый должен быть minDate, а последний должен быть maxDate, с 5 датами в середине. 7 чисел должны равномерно увеличиваться от minDate до maxDate. Как бы я это сделал? Надеюсь, я был чист.

Спасибо, Tonih

1 Ответ

1 голос
/ 22 апреля 2010

хорошо, если вы пытались равномерно распределить по дате, убедитесь, что все ваши объекты находятся в классе даты, а затем выполните 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 ()

...