2015-01-16 1 views
0

Мне нужно создать функцию увеличения количества счетов-фактур, такую ​​как новые книги. Как работает в новых книгах, он увеличивает число и алфавит.Свежие книги, такие как инкремент номера счета в javascript

Условие 1: если мой номер счет-фактура 0000012 он должен быть увеличен до 0000013

Условие 2: если мой номер счета-фактуры является 000001a он должен быть увеличен до 000001b

и так далее. Любая идея о том, как это сделать?


Моя попытка:

function replaceCharAt(string, index, character){ 
    return string.substr(0, index) + character + string.substr(index + character.length) 
} 

function generateInvoiceNumber(invoiceNumber, useIndex){ 
    var useIndex = useIndex || invoiceNumber.length - 1; 
    var invoiceNumber = invoiceNumber.trim(); 
    var incrementChar = invoiceNumber[useIndex]; 
    if(incrementChar == '9' || incrementChar == 'z' || incrementChar == 'Z'){ 
    if(incrementChar == 9){ 
     invoiceNumber = replaceCharAt(invoiceNumber, useIndex, '0'); 
    } 
    else{ 
     invoiceNumber = replaceCharAt(invoiceNumber, useIndex, 'a'); 
    } 
    return generateInvoiceNumber(invoiceNumber, useIndex - 1); 
    } 
    else{ 
    var replaceChar = String.fromCharCode(incrementChar.charCodeAt(0) + 1); 
    invoiceNumber = replaceCharAt(invoiceNumber, useIndex, replaceChar); 
    } 
    return invoiceNumber; 
} 

Это дает правильных результатов. но я не уверен обо всех условиях, и если он повесит цикл событий. Я напишу несколько тестов и попробую

+0

Вопрос: должно ли оно быть шестнадцатеричным значением? –

+0

Просьба указать поведение. Что добавит '000001z'? то же самое для '0000019' и т. д. – Mosho

+0

000001z woudl будет увеличено до, вероятно, 000002z (необходимо проверить в свежей книге, как они это делают.) и 0000019 будет увеличиваться до 0000020. – Yalamber

ответ

0

Я думаю, что это хорошо работает сейчас. Я тестировал его в большинстве сценариев.

module.exports = { 
    replaceCharAt: function replaceCharAt(string, index, character){ 
    var string = string.split(''); 
    string[index] = character; 
    return string.join(''); 
    }, 
    generateInvoiceNumber: function generateInvoiceNumber(invoiceNumber, useIndex){ 
    var invoiceNumber = invoiceNumber.trim(); 
    if(typeof useIndex === 'undefined' || useIndex === -1){ 
     useIndex = invoiceNumber.length - 1; 
    } 
    var incrementChar = invoiceNumber[useIndex]; 
    if(incrementChar == '9' || incrementChar == 'z' || incrementChar == 'Z'){ 
     if(incrementChar == 9){ 
     invoiceNumber = this.replaceCharAt(invoiceNumber, useIndex, '0'); 
     } 
     else{ 
     invoiceNumber = this.replaceCharAt(invoiceNumber, useIndex, 'a'); 
     } 
     if(useIndex === 0){ 
     return invoiceNumber = '1'+invoiceNumber; 
     } 
     return this.generateInvoiceNumber(invoiceNumber, useIndex - 1); 
    } 
    else{ 
     var replaceChar = String.fromCharCode(incrementChar.charCodeAt(0) + 1); 
     invoiceNumber = this.replaceCharAt(invoiceNumber, useIndex, replaceChar); 
    } 
    return invoiceNumber; 
    } 
};