2013-06-20 2 views
3

У меня есть объект, как это:Форматирование текста с закладками или пробелами

{ 
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 имеет этот functionality in printf, но как это сделать в javascript?

ответ

3

Хорошо. Найдено here:

/** 
* 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 
2

EDIT Вы можете добавить другие вкладки, используя '\ 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) в качестве количества разделительных пространств.

+0

Первая функция добавляет только одну вкладку, если ключ будет иметь длинное слово или несколько слов, одна вкладка будет недостаточно , Даже в моей первой строке строки требуется две вкладки. – hlcs

+1

@ancap Вы пытались добавить дополнительные вкладки, такие как ': \ t \ t' или даже': \ t \ t \ t'? – Teemu

+0

Я отредактировал первый пост. Как вы можете видеть в первой строке - три вкладки, во втором - два, в третьем и четвертом - три, в пятом - одно. – hlcs