Форматирование текста с помощью табуляции или пробелов

У меня есть такой объект:

{
 Name: "John"
 Location: "Unknown"
 Type: "Unknown"
 Status: "Unknown"
 Phone_number: "Unknown"
}

Нужно отформатировать так (с табуляцией или пробелами):

Name:           John // three tabs
Location:       Unknown // two tabs
Type:           Unknown // three tabs
Status:         Unknown // three tabs
Phone_number:   Unknown // one tab

Java и Perl имеют эту функциональность в printf, но как это сделать в javascript?


person hlcs    schedule 20.06.2013    source источник


Ответы (2)


Ok. Найдено здесь:

/**
 * object.padding(number, string)
 * Transform the string object to string of the actual width filling by the padding character (by default ' ')
 * Negative value of width means left padding, and positive value means right one
 *
 * @param       number  Width of string
 * @param       string  Padding chacracter (by default, ' ')
 * @return      string
 * @access      public
 */
String.prototype.padding = function(n, c)
{
        var val = this.valueOf();
        if ( Math.abs(n) <= val.length ) {
                return val;
        }
        var m = Math.max((Math.abs(n) - this.length) || 0, 0);
        var pad = Array(m + 1).join(String(c || ' ').charAt(0));
//      var pad = String(c || ' ').charAt(0).repeat(Math.abs(n) - this.length);
        return (n < 0) ? pad + val : val + pad;
//      return (n < 0) ? val + pad : pad + val;
};

Это не работает с вкладками, но работает с пробелами именно так, как я описываю в вопросе.

Для моего примера код будет таким:

$.each(myObj, function(myKey, myVal) {

   myOut += myKey.padding(20) + " = " + myVal + "\r\n";

});

Вывод будет:

Name                 = John
Location             = Unknown
Type                 = Unknown
Status               = Unknown
Phone_number         = Unknown
person hlcs    schedule 22.06.2013
comment
Это очень полезно, однако не работает с несколькими отступами в одной строке. - person Tetragrammaton; 28.03.2021

ИЗМЕНИТЬ Вы можете добавить больше вкладок, используя '\t'. Каждый '\t' означает одну вкладку, поэтому в console.log вы можете использовать больше console.log(prop + ":\t\t\t" + obj[prop]);

Передайте свой объект этой функции (это работает для любого объекта):

function printObject(obj)
  for(var prop in obj){
   if (obj.hasOwnProperty(prop)) {
    console.log(prop + ":\t" + obj[prop]);
   }
 }

Вы также можете получить довольно похожий вывод (но с кавычками), используя

JSON.stringify(obj, null, 2); 

Это в основном напечатает ваши объекты в формате jason и будет использовать последний аргумент (2) в качестве количества пробелов-разделителей.

person Raul Martins    schedule 20.06.2013
comment
Первая функция добавляет только одну вкладку, если в ключе будет длинное слово или мало слов, одной вкладки будет недостаточно. Даже в моем примере первая строка требует двух вкладок. - person hlcs; 21.06.2013
comment
@ancap Вы пытались добавить больше вкладок, например :\t\t или даже :\t\t\t? - person Teemu; 21.06.2013
comment
Я отредактировал первый пост. Как видите, в первой строке - три вкладки, во второй - две, в третьей и четвертой - три, в пятой - одна. - person hlcs; 21.06.2013