formatting js - Введите число с ведущими нулями в JavaScript





deobfuscator online (9)


function padToFour(number) {
  if (number<=9999) { number = ("000"+number).slice(-4); }
  return number;
}

Что-то вроде того?

Бонусная непонятная, но гладкая однострочная версия ES6:

let padToFour = number => number <= 9999 ? ("000"+number).slice(-4) : number;

ES6isms:

  • let это переменная с областью действия (в отличие от функционального охвата var )
  • => - функция стрелки, которая, среди прочего, заменяет function и добавляется ее параметрами
  • Если функция стрелки принимает единственный параметр, вы можете опустить скобки (следовательно, number => )
  • Если тело функции стрелки имеет одну строку, которая начинается с return вы можете опустить фигурные скобки и ключевое слово return и просто использовать выражение
  • Чтобы получить тело функции до одной строки, я обманул и использовал тройное выражение

Возможный дубликат:
Как создать Zerofilled значение с помощью JavaScript?

В JavaScript мне нужно иметь отступы.

Например, если у меня есть номер 9, это будет «0009». Если у меня будет число 10, это будет «0010». Обратите внимание, как он всегда будет содержать четыре цифры.

Один из способов сделать это - вычесть число минус 4, чтобы получить число 0, которое мне нужно положить.

Является ли этот способ более гладким?




Это не очень «гладкий», но быстрее выполнять операции с целыми числами, чем выполнять конкатенации строк для каждого дополнения 0 .

function ZeroPadNumber ( nValue )
{
    if ( nValue < 10 )
    {
        return ( '000' + nValue.toString () );
    }
    else if ( nValue < 100 )
    {
        return ( '00' + nValue.toString () );
    }
    else if ( nValue < 1000 )
    {
        return ( '0' + nValue.toString () );
    }
    else
    {
        return ( nValue );
    }
}

Эта функция также жестко привязана к вашей конкретной потребности (4-разрядная прокладка), поэтому она не является общей.




Забавно, мне недавно пришлось это сделать.

function padDigits(number, digits) {
    return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}

Используйте как:

padDigits(9, 4);  // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"

Не красиво, но эффективно.




Для удовольствия вместо использования цикла для создания дополнительных нулей:

function zeroPad(n,length){
  var s=n+"",needed=length-s.length;
  if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
  return s;
}



До сих пор не так много «гладких»:

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

Когда вы инициализируете массив с числом, он создает массив с length установленной для этого значения, так что массив, как представляется, содержит много undefined элементов. Хотя некоторые методы экземпляра Array пропускают элементы массива без значений, .join() не является или, по крайней мере, не полностью; он рассматривает их так, как будто их значение представляет собой пустую строку. Таким образом, вы получаете копию нулевого символа (или любого другого «z») между каждым из элементов массива; вот почему там + 1 .

Пример использования:

pad(10, 4);      // 0010
pad(9, 4);       // 0009
pad(123, 4);     // 0123

pad(10, 4, '-'); // --10



Пытаться:

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}

Теперь проверьте:

var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"

DEMO

В ES8 у нас есть новый метод padStart и padEnd который имеет синтаксис ниже.

'string'.padStart (targetLength [, padString]):

Итак, теперь мы можем использовать

const str = "5";
str.padStart(4, '0'); // '0005'



Вы могли бы сделать что-то вроде этого:

function pad ( num, size ) {
  return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}

Редактировать: это была основная идея для функции, но для добавления поддержки больших чисел (а также недопустимого ввода) это, вероятно, было бы лучше:

function pad ( num, size ) {
  if (num.toString().length >= size) return num;
  return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}

Это делает 2 вещи:

  1. Если число больше указанного размера, оно просто вернет номер.
  2. Использование Math.floor(num) вместо ~~num будет поддерживать большие числа.



Поскольку вы упомянули, что он всегда будет иметь длину 4, я не буду делать никаких ошибок, чтобы сделать этот пятно. ;)

function pad(input) {
    var BASE = "0000";
    return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}

Идея: просто замените «0000» номером, предоставленным ... Проблема с этим, если input равен 0, мне нужно жестко записать его, чтобы вернуть «0000». ЛОЛ.

Это должно быть достаточно гладким.

JSFiddler: http://jsfiddle.net/Up5Cr/




var index = haystack.indexOf(needle);




javascript formatting