1
resposta

Resultados diferentes com "[]" e " . "

Quando acesso a propriedade do objeto pelas [] a funcao funciona como esperado("a[propriedade]"). Porém, quando acesso por meio do ponto "." nao funciona conforme o esperado ("a.propriedade"). Alguém sabe me explicar o por que disso ?

function ordenar (lista, propriedade){
    const resultado = lista.sort((a, b)=> {
        if (a[propriedade] < b[propriedade]){
            return -1;
        }
        if (a[propriedade] > b[propriedade]){
            return 1;
        }
        return 0;
    })
    console.log(resultado)
}
ordenar(clientes, "nome")

Resultado fica diferente quando acesso pelo ponto:

function ordenar (lista, propriedade){
    const resultado = lista.sort((a, b)=> {
        if (a.propriedade < b.propriedade){
            return -1;
        }
        if (a.propriedade  > b.propriedade){
            return 1;
        }
        return 0;
    })
    console.log(resultado)
}
ordenar(clientes, "nome")
1 resposta

André,

Então... err... fiquei na dúvida ... o que é "a.propriedade"?

Para descobrir o que é, eu fiz o seguinte...

... pedi para fazer um "console.log" dentro da função anônima com "a.propriedade" e com "a[propriedade]", desta forma:

function ordenar(lista, propriedade, ordem = "crescente") {
  const resultado = lista.sort((a, b) => {
  
    console.log(a.propriedade);
    console.log(a[propriedade]);

    if (a.propriedade > b.propriedade) {
      return 1;
    } else if (a.propriedade < b.propriedade) {
      return -1;
    } else {
      return 0;
    }
  });
  • No caso do "a.propriedade" escreveu várias vezes "undefined" ... epa! Não dá para comparar isso! Mas não deu erro.
  • No caso do "a[propriedade]" escreveu os nomes corretamente. Aê sim!

Geralmente o que é colocado depois do "." (ponto) é um método.

E o que é colocado dentro dos colchetes "[]" pode ser um valor de índice da propriedade.

Leia mais em:

============================================

Definições de Método

No ECMAScript 2015 foi introduzida uma sintaxe reduzida para definição de métodos em inicializadores de objetos. É uma abreviação para uma função atribuída ao nome do método.

...

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Functions/Method_definitions

============================================

Array - Sumário

O objeto Array do JavaScript é um objeto global usado na construção de 'arrays': objetos de alto nível semelhantes a listas.

...

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array

============================================

Assessores de propriedade

Os assessores de propriedade fornecem acesso as propriedades de um objeto usando a notação de ponto ou a notação de colchetes.

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Property_Accessors

============================================

Espero ter ajudado.

Se sua dúvida foi resolvida, não esqueça de fechar o post e se a minha resposta foi a melhor, não esqueça de me pontuar.

[]'s,

Fabio I.