Formatação de string fácil com JavaScript // Ember.js

Se você estiver familiarizado com a função Ember.String.fmt do Ember , compreenderá rapidamente como isso funciona:

"Hello %@ %@".fmt("John", "Doe");
// "Hello John Doe"

"Hello %@2, %@ 1".fmt("John", "Doe");
// "Hello Doe, John"

Nos bastidores, chama:

Ember.String.fmt("Hello %@ %@",   ["John", "Doe"]);
Ember.String.fmt("Hello %2 %@ 1", ["John", "Doe"]);

Você acha que poderíamos nos livrar desses colchetes para que pareçam mais naturais e possam ser usados ​​como uma função auxiliar em vez de poluir o protótipo do String? Nós definitivamente poderíamos!

Ember.String.fmt("Hello %@ %@",     "John", "Doe");
Ember.String.fmt("Hello %@2, %@ 1", "John", "Doe");

Não leu bem? Esta é a implementação:

Ember.String.fmt = function (string /*, arg1, arg2, ..., argn */) {
var formats;
var index;

formats
= Array.prototype.slice.call(arguments, 1);
index
= 0;

return string.replace(/%@([0-9]+)?/g, function (match, argumentIndex) {
argumentIndex
= (argumentIndex) ? parseInt(argumentIndex, 10) - 1 : index++;
match
= formats[argumentIndex];

return ((match === null) ? '(null)' : (match === undefined) ? '' : match).toString();
});
};

O principal aqui é:

Array.prototype.slice.call(arguments, 1);

Ele simplesmente converte o argumentsobjeto em um array e remove o primeiro elemento (que é a string que queremos formatar).

"John", "Doe"nos bastidores torna-se um array novamente, mas a API definitivamente parece mais natural e tem uma boa leitura sem colchetes! Isso foi simples, não foi?