Вы можете создать метод filterCar
через наследование прототипа
Array.prototype.filterCar = function(feature, range) {
return this.filter((el) => {
// is the range defined?
if (!!range.length) {
return el[feature] >= range[0] && el[feature] <= range[1];
}
else {
return true;
}
})
};
var cars = [
{name:'Ferrari', speed:240, price: 100},
{name:'Porsche', speed:220, price: 90},
{name:'Bugatti', speed:300, price: 500}
];
var result1 = cars.filterCar('speed', [240, 300])
.filterCar('price', [80, 120]));
var result2 = cars.filterCar('speed', [ ])
.filterCar('price', [80, 120]));
console.log(result1); // [{name: "Ferrari", speed: 240, price: 100}]
console.log(result2); /* [{name: "Ferrari", speed: 240, price: 100},
{name: "Porsche", speed: 220, price: 90}] */
Размещенный код использует целое число для получения тактовой частоты системы. system_clock
также может быть вызвано с использованием реальной переменной для возврата ставки. Мое подозрение, подтвержденное в настоящее время обменом комментариями, заключалось в том, что целое число было неточным представлением тактовой частоты, тем самым учитывая неточность, наблюдаемую при использовании system_clock
.
OP сообщает об исправлении проблемы, используя реальную переменную для тактовой частоты.
Я зависит от того, насколько точно вы хотите, чтобы измеренное время было. Следующий модуль позволит вам рассчитать время с точностью до миллисекунд.
module time_keeper
implicit none
integer :: start(8), now(8)
contains
subroutine startclock( )
implicit none
call date_and_time(values=start)
end subroutine startclock
subroutine elapsedtime_s( et_s )
implicit none
integer :: diffs(8)=0
real , intent(out):: et_s ! in seconds
call date_and_time(values=now)
! - Find the difference in times
diffs = now - start
! - This works only when the time is measured in a specific month
if (diffs(3) > 0) then
diffs(5) = 24*diffs(3) + diffs(5)
endif
et_s = diffs(5) * 3600 + diffs(6) * 60 + diffs(7) + 1e-3 * diffs(8)
end subroutine elapsedtime_s
end module time_keeper
program main
use time_keeper
implicit none
integer :: x=0, i
real :: et_s
call startclock()
do i = 1, 1e5
x = x + 1
end do
call elapsedtime_s( et_s )
write(*,*) et_s
end program main
Обратите внимание, что time_keeper::elapsedtime_s
работает, только если время измеряется в течение месяца. Если вы хотите, чтобы измерения также учитывались в месяцах, вы можете расширить подпрограмму. Это должно быть просто.
Другие варианты включают временную библиотеку , system_clock
(см. здесь ). Ссылка для date_and_time
здесь здесь