Generate a list of sentences ordered by arraySort () in js

0

I'm trying to create a list of sentences sorted alphabetically using arraySort () in JS, but using the code below, returns a duplicate phrase. Any idea how to do it differently?

//Cria lista de textos

var lista = [];

lista.push( "Amanhã vou comprar um carro." );
lista.push( "Está nevando no Canadá." );
lista.push( "Quem fez o tema?" );
lista.push( "Antes tarde do que nunca." );
lista.push( "Você não pode fazer isso." );
lista.push( "Perdi minha carteira ontem." );


function arraySort( a, b ){
    lista.sort( );
} 
var retorno = lista.sort( arraySort );
console.log( retorno );

/*  
**Retorno:**  
[ 'Amanhã vou comprar um carro.',  
  'Está nevando no Canadá.',  
  'Está nevando no Canadá.',  
  'Perdi minha carteira ontem.',  
  'Quem fez o tema?',  
  'Você não pode fazer isso.' ]
*/

If I use without the function, returns correct:

var retorno = lista.sort( );
console.log( retorno );
    
asked by anonymous 17.05.2018 / 00:27

1 answer

1

You are doing sort within another sort :

function arraySort( a, b ){
    lista.sort( );
//         ^---- e dentro da função de ordenação chama sort de novo
} 

var retorno = lista.sort( arraySort );
//                   ^--- começa por chamar o ordenar aqui

If you want to do normal sorting, just call sort normally, as indicated in the question itself:

lista.sort( );

It is also relevant to mention that sort changes the list directly, so the return is the list itself that has been sorted. That is, it does not return a new ordered copy, but changes the original one.

The function is used to define different ways of comparing. You can for example sort the texts in reverse with the comparison function using localeCompare to compare the strings:

function arraySort( a, b ){
    return b.localeCompare(a);
}

Whereas if it was a.localeCompare(b) already would give the ordering a-z.

See the result of this comparison function in your code:

//Cria lista de textos
 var lista = [];

lista.push( "Amanhã vou comprar um carro." );
lista.push( "Está nevando no Canadá." );
lista.push( "Quem fez o tema?" );
lista.push( "Antes tarde do que nunca." );
lista.push( "Você não pode fazer isso." );
lista.push( "Perdi minha carteira ontem." );

function arraySort( a, b ){
    return b.localeCompare(a);
} 

var retorno = lista.sort( arraySort );
console.log( retorno );
    
17.05.2018 / 00:48