Estava trabalhando em um projeto utilizando javascript puro, sem utilizar jQuery. Precisei trabalhar com o formato JSON, porem meus objetos precisavam ser ordenados conforme a necessidade do sistema. Bem, depois de muitos testes vai uma dica:
01 - Ordenar objetos JSON
Listagem 01 – objeto JSON
var objJSON = [
{ "ID": 1, "Name": "Luciano Lima", "Email": "lima@lucianolima.com.br" },
{ "ID": 4, "Name": "Fabio Almeida", "Email": "fabio@lucianolima.com.br" },
{ "ID": 2, "Name": "Ricardo", "Email": "ric@lucianolima.com.br" },
{ "ID": 3, "Name": "Marcio", "Email": "marcio@lucianolima.com.br" }
];
Acima temos o objeto que iremos ordenar. Vamos criar dois métodos, “OrdenarPorId(objA, objB)” e “OrdenarPorNome(objA, objB)”.
Listagem 02 – métodos de ordenação
function OrdenarPorId(objA, objB) {
return objA.ID - objB.ID;
}
function OrdenarPorNome(objA, objB) {
return ((objA.Name == objB.Name) ? 0 : ((objA.Name > objB.Name) ? 1 : -1 ));
}
Ok. Agora que temos nossos dois métodos podemos realizar a ordenação do objeto. Mas como isso funciona? Bem, para que consigamos realizar a ordenação devemos chamar o método “sort()” que é nativo de objetos do tipo Array, passando nossos métodos como callback. Quanto do o método “sort()” for iniciar a ordenação, ele vai enviar os objetos para nossos métodos, eles irão realizar a ordenação e retornar para o método “sort()”, assim caso precisemos de outra forma de ordenação, basta criar um terceiro método da forma que lhe convier.
Na listagem abaixo temos a forma de como invocar nossa ordenação. Criei apenas mais um método para exibir a saída.
Listagem 03 – invocando a ordenação
function Exibir(obj) {
for (var o in obj)
document.writeln("Id " + obj.ID + ", Nome " + obj.Name + ", Email " + obj.Email);
}
// Chamada ao objeto original
Exibir(objJSON);
// Chamada ao objeto ordenando por ID
objJSON.sort(OrdenarPorId);
Exibir(objJSON);
// Chamada ao objeto ordenando por Nome
objJSON.sort(OrdenarPorNome);
Exibir(objJSON);
02 - Método para Formatar uma String
Como todos sabem o Javascript ainda tem que melhorar muito, no mesmo projeto que estava utilizando o JSON como padrão dos objeto, precisei formatar uma string para um padrão definido pelo usuário, porém minha surpresa foi que a “classe” “String” do javascript não possui um método “format” então fui obrigado a criar uma implementação, espero que aproveitem.
Listagem 01 – implementação do método format
function _formatInline() {
var _value = this;
for (var i = 0; i < arguments.length; i++) {
var regExp = new RegExp('\\{' + (i) + '\\}', 'gm');
_value = _value.replace(regExp, arguments[i]);
}
return _value;
}
function _formatStatic() {
for (var i = 1; i < arguments.length; i++) {
var regExp = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
arguments[0] = arguments[0].replace(regExp, arguments[i]);
}
return arguments[0];
}
if (!String.prototype.format) {
String.prototype.format = _formatInline;
}
if (!String.format) {
String.format = _formatStatic;
}
Para utilizarmos esta implementação basta chamar o método “format” direto de uma string ou utilizar a classe String conforme na listagem 02.
Listagem 02 – utilização
// implementação com String.format
var text = String.format("Esta {0} será formatada com {1} {2}","sentença","nosso","método");
// implementação com "".format
var text = "Esta {0} será formatada com {1} {2}".format("sentença","nosso","método");
Enjoy!!