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!!