1707 Stimmen

Sortieren eines Arrays von Objekten nach Eigenschaftswerten

Ich habe die folgenden Objekte über AJAX erhalten und in einem Array gespeichert:

var homes = [
    {
        "h_id": "3",
        "city": "Dallas",
        "state": "TX",
        "zip": "75201",
        "price": "162500"
    }, {
        "h_id": "4",
        "city": "Bevery Hills",
        "state": "CA",
        "zip": "90210",
        "price": "319250"
    }, {
        "h_id": "5",
        "city": "New York",
        "state": "NY",
        "zip": "00010",
        "price": "962500"
    }
];

Wie erstelle ich eine Funktion zum Sortieren der Objekte nach dem price Eigentum in aufsteigend o absteigend nur mit JavaScript bestellen?

2209voto

Stobor Punkte 42091

Häuser nach Preis in aufsteigender Reihenfolge sortieren:

homes.sort(function(a, b) {
    return parseFloat(a.price) - parseFloat(b.price);
});

Oder nach der ES6-Version:

homes.sort((a, b) => parseFloat(a.price) - parseFloat(b.price));

Eine Dokumentation finden Sie unter ici .

Für absteigende Reihenfolge können Sie verwenden

homes.sort((a, b) => parseFloat(b.price) - parseFloat(a.price));

738voto

Kenan Banks Punkte 196831

Hier ist eine flexiblere Version, mit der Sie Folgendes erstellen können wiederverwendbare Sortierfunktionen zu erstellen und nach jedem Feld zu sortieren.

const sort_by = (field, reverse, primer) => {

  const key = primer ?
    function(x) {
      return primer(x[field])
    } :
    function(x) {
      return x[field]
    };

  reverse = !reverse ? 1 : -1;

  return function(a, b) {
    return a = key(a), b = key(b), reverse * ((a > b) - (b > a));
  }
}

//Now you can sort by any field at will...

const homes=[{h_id:"3",city:"Dallas",state:"TX",zip:"75201",price:"162500"},{h_id:"4",city:"Bevery Hills",state:"CA",zip:"90210",price:"319250"},{h_id:"5",city:"New York",state:"NY",zip:"00010",price:"962500"}];

// Sort by price high to low
console.log(homes.sort(sort_by('price', true, parseInt)));

// Sort by city, case-insensitive, A-Z
console.log(homes.sort(sort_by('city', false, (a) =>  a.toUpperCase()
)));

153voto

Ricardo Marimon Punkte 9889

Um sie zu sortieren, müssen Sie eine Komparatorfunktion mit zwei Argumenten erstellen. Rufen Sie dann die Sortierfunktion mit dieser Komparatorfunktion wie folgt auf:

// a and b are object elements of your array
function mycomparator(a,b) {
  return parseInt(a.price, 10) - parseInt(b.price, 10);
}
homes.sort(mycomparator);

Wenn Sie aufsteigend sortieren wollen, tauschen Sie die Ausdrücke auf beiden Seiten des Minuszeichens aus.

87voto

Ishan Liyanage Punkte 1917

Für die Sortierung von Zeichenketten, falls jemand sie braucht,

const dataArr = {

  "hello": [{
    "id": 114,
    "keyword": "zzzzzz",
    "region": "Sri Lanka",
    "supportGroup": "administrators",
    "category": "Category2"
  }, {
    "id": 115,
    "keyword": "aaaaa",
    "region": "Japan",
    "supportGroup": "developers",
    "category": "Category2"
  }]

};
const sortArray = dataArr['hello'];

console.log(sortArray.sort((a, b) => {
  if (a.region < b.region)
    return -1;
  if (a.region > b.region)
    return 1;
  return 0;
}));

55voto

Stephen Quan Punkte 16456

Wenn Sie eine ES6 kompatiblen Browser, den Sie verwenden können:

Der Unterschied zwischen aufsteigender und absteigender Sortierung ist das Vorzeichen des Wertes, der von der Vergleichsfunktion zurückgegeben wird:

var ascending = homes.sort((a, b) => Number(a.price) - Number(b.price));
var descending = homes.sort((a, b) => Number(b.price) - Number(a.price));

Hier ist ein funktionierender Codeschnipsel:

var homes = [{
  "h_id": "3",
  "city": "Dallas",
  "state": "TX",
  "zip": "75201",
  "price": "162500"
}, {
  "h_id": "4",
  "city": "Bevery Hills",
  "state": "CA",
  "zip": "90210",
  "price": "319250"
}, {
  "h_id": "5",
  "city": "New York",
  "state": "NY",
  "zip": "00010",
  "price": "962500"
}];

homes.sort((a, b) => Number(a.price) - Number(b.price));
console.log("ascending", homes);

homes.sort((a, b) => Number(b.price) - Number(a.price));
console.log("descending", homes);

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