Generate a sentence list sorted by the js arraySort()

Asked

Viewed 54 times

0

I am trying to create a list of phrases sorted alphabetically using the JS arraySort(), 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 Function, returns correct:

var retorno = lista.sort( );
console.log( retorno );
  • The problem starts in sortCeption. You are making a sort within another sort

  • How could I do?

1 answer

1


You are making one 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 make a normal ordering just call the sort normally, as indicated in the question itself:

lista.sort( );

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

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

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

Whereas if it were a.localeCompare(b) would already give the ordination 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 );

Browser other questions tagged

You are not signed in. Login or sign up in order to post.