Привет всем! У меня есть небольшая PHP-функция, которая преобразует серийный номер (от 2 до 9999) в другое числовое значение. Мне нужно реализовать аналогичную логику на JavaScript. Вот исходный PHP-код:
Интересная задача! А зачем вообще нужно такое преобразование? Просто любопытно, для какой задачи это применяется. Кстати, в JS битовые операции работают с 32-битными числами, так что результат может отличаться от PHP для больших значений. Может, стоит использовать BigInt для точности? Или достаточно обычных чисел?
В JavaScript похожую функцию можно реализовать так:
function convertSerialToNumber(serial) {
const parts = serial.split('-');
if (parts.length === 2 && !isNaN(parts[0]) && !isNaN(parts[1])) {
return (parseInt(parts[0]) << 23) | parseInt(parts[1]);
}
return -1;
}
Основные отличия: используем split вместо explode, проверяем длину массива через length, а is_numeric заменяем на !isNaN. Также нужно явно преобразовать строки в числа через parseInt перед побитовыми операциями.