Назад к вопросам
Middle
2
Есть массив строк, представляющих номера пунктов иерархического нумерованного списка (например: '1', '1.1', '1.2', '1.10', '2', '2.1'). Нужно отсортировать их в правильном порядке, как в документе, используя стандартную функцию sort с callback-функцией.
Компании, где спрашивали
Электронные офисные системы
Ответ от нейросети
sobes.tech AI
Для сортировки массива строк с иерархическими номерами пунктов (например, '1', '1.1', '1.2', '1.10', '2', '2.1') нужно сравнивать их по частям, разделённым точками, как по числам, а не по строкам. В JavaScript можно использовать функцию sort с callback, которая разбивает строки на массивы чисел и сравнивает их поэлементно:
const items = ['1', '1.1', '1.2', '1.10', '2', '2.1'];
items.sort((a, b) => {
const aParts = a.split('.').map(Number);
const bParts = b.split('.').map(Number);
const len = Math.max(aParts.length, bParts.length);
for (let i = 0; i < len; i++) {
const aNum = aParts[i] || 0;
const bNum = bParts[i] || 0;
if (aNum !== bNum) {
return aNum - bNum;
}
}
return 0;
});
console.log(items);
// Выведет: ['1', '1.1', '1.2', '1.10', '2', '2.1']
Таким образом, сортировка учитывает числовое значение каждой части номера, а не лексикографический порядок строк.