537 Stimmen

Sortieren von Zeichenketten in JavaScript

Ich habe eine Liste von Objekten, die ich nach einem Feld sortieren möchte attr vom Typ String. Ich habe versucht, mit -

list.sort(function (a, b) {
    return a.attr - b.attr
})

aber festgestellt, dass - scheint mit Strings in JavaScript nicht zu funktionieren. Wie kann ich eine Liste von Objekten anhand eines Attributs vom Typ String sortieren?

5voto

deathfry Punkte 426

Es sollte Funktionen für aufsteigende und absteigende Aufträge geben

if (order === 'asc') {
  return a.localeCompare(b);
}
return b.localeCompare(a);

4voto

TrickOrTreat Punkte 623

Verwenden Sie sort() direkt und ohne jegliche - ou <

const areas = ['hill', 'beach', 'desert', 'mountain']
console.log(areas.sort())

// To print in descending way
console.log(areas.sort().reverse())

0voto

eggmatters Punkte 1146

In Ihrer Operation in der ersten Frage führen Sie folgende Operation durch:

item1.attr - item2.attr

Angenommen, es handelt sich um Zahlen (d.h. item1.attr = "1", item2.attr = "2"). Sie können trotzdem den Operator "===" (oder andere strenge Auswerter) verwenden, sofern Sie den Typ sicherstellen. Das Folgende sollte funktionieren:

return parseInt(item1.attr) - parseInt(item2.attr);

Wenn sie alphaNumerisch sind, dann verwenden Sie localCompare().

0voto

Petr Varyagin Punkte 249
list.sort(function(item1, item2){
    return +(item1.attr > item2.attr) || +(item1.attr === item2.attr) - 1;
}) 

Wie sie funktionieren Proben:

+('aaa'>'bbb')||+('aaa'==='bbb')-1
+(false)||+(false)-1
0||0-1
-1

+('bbb'>'aaa')||+('bbb'==='aaa')-1
+(true)||+(false)-1
1||0-1
1

+('aaa'>'aaa')||+('aaa'==='aaa')-1
+(false)||+(true)-1
0||1-1
0

-4voto

Julio Munoz Punkte 13
<!doctype html>
<html>
<body>
<p id = "myString">zyxtspqnmdba</p>
<p id = "orderedString"></p>
<script>
var myString = document.getElementById("myString").innerHTML;
orderString(myString);
function orderString(str) {
    var i = 0;
    var myArray = str.split("");
    while (i < str.length){
        var j = i + 1;
        while (j < str.length) {
            if (myArray[j] < myArray[i]){
                var temp = myArray[i];
                myArray[i] = myArray[j];
                myArray[j] = temp;
            }
            j++;
        }
        i++;
    }
    var newString = myArray.join("");
    document.getElementById("orderedString").innerHTML = newString;
}
</script>
</body>
</html>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X