Я добавил страницу случайных чисел в свой проект NameWheelPro, и цифры оказались сложнее, чем имена. Все это — ванильный JS с нулевыми зависимостями, поэтому каждое исправление ниже работает в любом проекте. Если вы строите свой собственный, выберите номер...
Я добавил страницу случайных чисел в свой проект NameWheelPro, и цифры оказались сложнее, чем имена. Все это — ванильный JS с нулевыми зависимостями, поэтому каждое исправление ниже работает в любом проекте.
Если вы сами создаете числовое колесо, вот четыре ошибки, которые стоит знать вместе с кодом.
sort() помещает 10 перед 2
По умолчанию сортировка осуществляется по алфавиту, даже для чисел:
['1', '10', '2', '20', '3'].sort();
// ["1", "10", "2", "20", "3"], никому не нужно
localeCompare имеет числовой режим, который исправляет это и по-прежнему обрабатывает текст:
const sortEntries = (arr) =>
[...arr].sort((a, b) =>
a.localeCompare(b, undefined, { числовое: true, чувствительность: 'base' })
);
sortEntries(['10', '2', 'Боб', '1']); // ["1", "2", "10", "Боб"]
Разрешите людям вводить диапазоны
Если ваш инструмент поддерживает пользовательские списки, никто не захочет вводить числа от 1 до 50 один за другим. Разбор 1-10, 15, 20-25 занимает несколько строк:
функция parseCustom(текст, макс = 500) {
константный выход = [];
for (константная часть text.split(/[\n,]+/)) {
const s = part.trim();
если (!s) продолжится;
const m = s.match(/^(\d+)\s*-\s*(\d+)$/);
если (м) {
пусть [a, b] = [Число(m[1]), Число(m[2])];
если (a > b) [a, b] = [b, a]; // "10-5" все еще работает
для (пусть n =