2017-04-20 3 views
0

Ich Filterung und Artikel in dieser Art und Weise Sortierung:Wie können unsortierte Artikel innerhalb einer Sortierfunktion zurückgegeben werden?

items 
    .filter(// filter logic) 
    .sort((a, b) => { 
    if (shouldntSort) return 
    // sorting logic 
    }, 

Ich dachte, die return die sort Funktion stoppen würde, aber ich war falsch. Wenn Sie nur die gesamte Methode .sort entfernen, werden die Artikel aus dem sortierten Beign gestoppt.

Wie kehre ich die unsortierten Artikel innerhalb .sort?

+2

* "Wie kann ich zurückkehren die unsortierten Gegenstände bilden in .sort? "* Was bedeutet das? Wenn Sie sie nicht sortiert haben wollen, sortieren Sie sie nicht. –

Antwort

3

bilden Wenn Sie sort nennen, wirst du sortieren. Es gibt keinen vernünftigen Weg, es nicht zu tun.

So rufen Sie nicht sort in dem Fall, dass Sie nicht sortieren möchten:

items = items.filter(/*...*/); 
if (!shouldntSort) { 
    items.sort(); 
} 

Ich dachte, die return die sort Funktion

Die return nur Ausfahrten aufhören würde die Art Rückruf. sort ruft den Callback wiederholt auf, um zu fragen, wie zwei Elemente zueinander in Beziehung stehen sollten (ob das erste vor oder nach dem zweiten sein sollte). Es gibt keinen "cancel the sort" Rückgabewert von diesem Callback.


Wenn Sie eine Version benötigt man als Teil des gleichen Ausdruck verwenden könnte, könnten Sie selbst geben eine maybeSort Funktion:

Object.defineProperty(Array.prototype, "maybeSort", { 
    value: function(shouldSort, sortCallback) { 
     if (shouldSort) { 
      return sortCallback ? this.sort(sortCallback) : this.sort(); 
     } 
     return this; 
    } 
}); 

dann

items = items 
    .filter(/*...*/) 
    .maybeSort(!shouldntSort); 
Verwandte Themen