Дело при работе с рядом версий формата - PullRequest
1 голос
/ 11 ноября 2019

Когда я получу число в формате версии. Пример "1.0.0.0". Если мне нужно перейти к следующей версии номера, и это приведет к "1.0.0.1"

с использованиемприведенный ниже код регулярного выражения получит идеальный результат в виде «1.0.0.1» - приращение версии

let version = "1.0.0.0";
let nextVersion = version.replace(/.$/, parseInt(version[version.length - 1], 10) + 1);

console.log(nextVersion)

Но если я получу число как «1» не в формате версии, но я ожидаю, что тот же результат, что и выше, будет «1.0.0.1». Какя буду иметь дело с номером в этом случае? если число "22", я бы ожидал, что оно будет "22.0.0.1"

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Я сделал версию, в которой вы передаете позицию, которую хотите увеличить.

Если позиция не существует, она создается, если позиция не пройдена, это 3

const nextVersion = (ver, pos=3) => {
  let [main,...rest] = ver.split(".")
  rest = Array.isArray(rest) && rest.length > 0 ? rest : Array(pos).fill(0,0,pos);
  if (rest.length<pos) rest.push(0); // make sure it is long enough
  +rest[pos-1]++; // interestingly enough the + was not needed here
  return `${main}.${rest.join(".")}`; // or use rest.unshift(main)
}

console.log(nextVersion("22",3))
console.log(nextVersion("1.0.0.1",3))
console.log(nextVersion("22",1))
console.log(nextVersion("22.1",1))
console.log(nextVersion("22.1",2))
console.log(nextVersion("1.0.0.1",1))
console.log(nextVersion("22")); // no parameters
1 голос
/ 11 ноября 2019

Вы можете разделить и заполнить массив версий, а затем добавить один к последнему элементу.

function next(version) {
    var items = version.split('.').map(Number);
        
    while (items.length < 4) items.push(0);
    items[3]++;
    
    return items.join('.');
}

console.log(next("1.0.0.0"));
console.log(next("1"));
console.log(next("22"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...