Pergunta

Eu tenho um array de JavaScript objectss que ter uma seqüência de descrição.Estou tentando implementar um modelo simplificado do algoritmo de classificação que vai cair caso, tira as tags de HTML e, em seguida, tira tudo, mas letras e dígitos.Eu tenho:

DASHBOARD.todo_entries.sort(function(first, second)
  {
  var first_workbench = first.description.toLowerCase();
  var second_workbench = second.description.toLowerCase();
  first_workbench = first_workbench.replace(/<.*?>/, '');
  second_workbench = second_workbench.replace(/<.*?>/, '');
  first_workbench = first_workbench.replace(/[^_\w]/, '');
  second_workbench = second_workbench.replace(/[^_\w]/, '');
  console.log('"' + first_workbench + '", "' + second_workbench + '"');
  return (first_workbench > second_workbench);
  });

No presente, que é consistentemente a gerar uma ordem de classificação com as descrições de:

Testing: d.
Testing: e.
Test: a.
Testing: f.
Test: c.
Test: b.
Testing: g.
Testing: b.
Testing: a.
Test: d.
Testing: c.
Testing: h.
Testing: i.
Testing: j.
Testing: k.
Testing: l.

O que eu esperava acontecer é que ela teria um Teste:[a-d]", que aparecem em ordem e, em seguida, "Teste:[a-l]", que aparecem em ordem.

Eu não tenho certeza de como o código algo que seria, naturalmente, gerar esse fim;ele não coincidir com a sua ordem de criação (eu acho que o tempo de criação/ordem de "Teste:[a-d]" e "Teste:[a-l]" se sobrepõem, mas foram criadas individualmente, em ordem sequencial).

Eu estou ficando semelhante, mas não idêntica, de resultados, se eu apenas definir a função para comparar inalterado descrições com < ou >.Pelo menos dentro de "Teste"/"Teste", um inalterado lexicográfica de pesquisa deve coincidir com os resultados da pesquisa que eu quero.Eu procurei um pouco através do meu código e não encontrei nada, obviamente, adulteração com a ordem da matriz.

Nada de pular fora tão errado?

Obrigado,

Foi útil?

Solução

O JS Array.sort o método assume uma função de comparação cmp(a, b) que deve retornar 1 ou outro número positivo (indicando a < b), -1 ou outro número negativo (indicando b > a), ou 0 (indicando valores equivalentes) - consulte o MDN docs.Sua retorna um booleano, efetivamente, apenas 1 ou 0, para não classificar corretamente.

Tente

return first_workbench === second_workbench ? 0 :
    first_workbench > second_workbench ? 1 : -1;

ou semelhante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top