В текущей версии Chrome (сентябрь 2017 года) я ограничен примерно 8,3 миллионами ключей. Попробуйте вставить это в консоль вашего браузера:
let obj = {};
let keyCount = 0;
while(1) {
obj[Math.random()] = Math.random();
if(++keyCount % 10000 === 0) console.log(keyCount);
}
Я получаю идентичный предел в Node.js:
node --max-old-space-size=20000 -e "let obj = {}; let keyCount = 0; while(1) { obj[Math.random()] = Math.random(); if(++keyCount % 10000 === 0) console.log(keyCount); }"
Интересно, если я использую Map , я могу получить около 16.8 миллионов ключей до того, как он сработает (вы можете преодолеть этот предел с помощью чего-то вроде this ).
I ' m собираюсь повторить все, но я просто рекомендую вам загрузить гем activesupport
, чтобы вы могли просто использовать его как библиотеку. Вам не нужны все Rails для использования ordinalize
.
% gem install activesupport ... % irb irb> require 'rubygems' #=> true irb> require 'activesupport' #=> true irb> 3.ordinalize #=> "3rd"
Я не знаю, делает ли он это намного (любой?) Быстрее, чем коммутатор, но я сделал константу с окончаниями:
DAY_ENDINGS = ["th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "th", "st", "nd", "rd", "th", "th", "th", "th", "th", "th", "th", "st"]
Затем просто использовал это как:
DAY_ENDINGS[date.mday]
Как я хотел, чтобы окончание внутри
<span>th</span>
Если вы не используете Rails , добавьте этот метод ordinalize (код без стыда взяты из исходного кода Rails) в класс Fixnum
class Fixnum
def ordinalize
if (11..13).include?(self % 100)
"#{self}th"
else
case self % 10
when 1; "#{self}st"
when 2; "#{self}nd"
when 3; "#{self}rd"
else "#{self}th"
end
end
end
end
Затем отформатируйте дату следующим образом:
> now = Time.now
> puts now.strftime("#{now.day.ordinalize} of %B, %Y")
=> 4th of July, 2009
Я не думаю, что он есть в Ruby, но если у вас есть Rails, попробуйте следующее: -
puts 3.ordinalize #=> "3rd"
created_at.strftime("#{created_at.day.ordinalize} of %m, %y")
Произведет "4 июля 2009 г."