2010-04-22 2 views
0

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

Спасибо, Tonih

+1

Является ли это какой-то типом проблемы домашнего задания? – BoxOfNotGoodery

+0

Нет, но это проблема, с которой я сталкиваюсь. Мои надежды в том, что ваш вопрос подразумевает, что его легко? Спасибо – toneb

+0

Можете ли вы дать быстрый пример входов и ожидаемого результата? Мне интересно, что именно вам нужно здесь. Будут ли даты случайными? Если вы можете просто объяснить, я попытаюсь придумать пример. – BoxOfNotGoodery

ответ

1

хорошо, если вы пытаетесь равномерно распределить по дате, то убедитесь, что все ваши объекты в классе даты, то сделать массив [29] .getTime() - массив [0] .getTime()/7 для вашего среднего шага, затем сделайте что-то вроде array.forEach() с помощью функции сравнения, чтобы попытаться приблизиться к каждому шагу.

--edit--

попробовать что-то вроде:

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

это, конечно, имеет дело с preumed даже распространение дат, там может быть вешать добавления ту же дату в несколько различных если все dateArray собраны вместе, можно оптимизировать, но посмотрите, что вы можете с ним сделать.

i havnt проверял этот код, но он должен работать довольно корректно. взглянуть на них, если у вас есть проблема:

Array::forEach()

Date::getTime()

+0

Спасибо, shortstick. Однако ваша логика имеет смысл, но я новичок в этом. Можно ли показать, как это будет выглядеть в коде? Спасибо – toneb

+0

есть краткий обзор одного решения, возможно, не самого лучшего или самого быстрого, но, возможно, самого простого для понимания. посмотрите, что вы думаете. – longstaff

Смежные вопросы