Мне нужна одна помощь. У меня есть одно значение ('i.e-001'), типом данных которого является varchar, и я преобразую его в целое число, а затем хочу добавить 1 каждый раз при записи в БД. Я сделал что-то вроде ниже.

var newcode=parseInt(response.data.code)+1;

Здесь response.data.code содержит код 001, и он поступает от пользователя DB.first, выбирает самый последний код (i.e-001) из БД и увеличивает его на 1, затем сохраняя в БД. В этом случае я получаю новое значение кода 2, но я должен получить 002, '003', и так далее. Пожалуйста, помогите мне.

0
satya 15 Дек 2015 в 08:00

4 ответа

Лучший ответ

Используйте небольшую функцию:

<script>
function pad(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

var len = response.data.code.length;
var newcode=parseInt(response.data.code)+1;
alert(pad(newcode, len));
</script>

JSFiddle

3
Thamilan 15 Дек 2015 в 05:24

Когда вы делаете parseInt, Javascript удаляет 00 перед числом, и вы получаете точное 1.

Так что, если вы добавите 1, вы получите 2.

Если вы хотите получить 002, вы должны попробовать

var newcode= '00'+parseInt(response.data.code)+1;

Для 10 цифр просто зациклите это:

for(var i=0; i<10-newcode.length; i++){
    newcode = '0'+newcode;
}

Но лучшее решение предоставил Елдар Кургмангалиев.

Это ужасная ошибка - генерировать ID в jQuery, делать это в базе данных.

0
Sanat Serikuly 15 Дек 2015 в 05:12

Попробуйте использовать String.prototype.replace() с RegExp /(\d+$)/ для сопоставления цифровых символов

var str = "i.e-009";
str = str.replace(/(\d+$)/, function(match) {
  var n = Number(match) + 1, len = String(n).length
  // if `n` equals `9` , return `"i.e-009"`
  // if `n` equals `10`, return `"i.e-010"`
  // if `n` equals `100` rerurn `"i.e-100"`
  , res = len === 1 ? "00" : len === 2 && "0" || len === 3 && "";
  return res + n
});

console.log(str)
0
guest271314 15 Дек 2015 в 05:31

После увеличения сделать заполнение снова

var originalLength = response.data.code.length; //to ensure that new number is of same length
var newcode=parseInt(response.data.code)+1;
while( newcode.toString().length < originalLength  ) //assuming that you want length 3
{
    newcode= "0" + newcode;
}
alert( newcode );
1
gurvinder372 15 Дек 2015 в 05:16