Mam tablicę zawierającą obiekty, które mają name i type.

Próbuję zawsze posortować tablicę, aby obiekty są sortowane według typu jako home, draw, away.

Przykładem jednej z tablic wygląda tak. Tablice są wysyłane z backend i są wysyłane w różnych zamówieniach za każdym razem. Nazwy są również inne za każdym razem.

var arr = [
  {
    type: 'home',
    name: 'Liverpool Blues'

  }, {
    type: 'away',
    name: 'Manchester Reds'
  },
  {
    type: 'draw',
    name: 'Draw'
  }
];

Mój kod wygląda tak. Myślałem, że rysunek powinien zostać posortowany do środka, jeśli dom jest zawsze pchany do przodu, a daleko jest zawsze pchany do końca, chociaż myślę, że musi istnieć błąd, w jaki sposób sortuję tablicę.

return [...selections].sort((a, b) => {
    if (a.type === "HOME") return -1;
    if (b.type === "AWAY") return 1;
    return 0;
});
2
user7597670 27 czerwiec 2017, 11:22

3 odpowiedzi

Najlepsza odpowiedź

Możesz użyć obiektu, który grupuje właściwość type przez żądane zamówienie.

var array = [{ type: 'home', name: 'Liverpool Blues' }, { type: 'away', name: 'Manchester Reds' }, { type: 'draw', name: 'Draw' }],
    order = { home: 1, draw: 2, away: 3 };

array.sort(function (a, b) { return order[a.type] - order[b.type]; });

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
Nina Scholz 27 czerwiec 2017, 08:28

Kolejność, którą chcesz, jest odwrócona alfabetyczna (dom, rysować, daleko), więc odwrotne sortowanie na type Właściwość zrobi:

var arr = [
  {
    type: 'home',
    name: 'Liverpool Blues'

  }, {
    type: 'away',
    name: 'Manchester Reds'
  },
  {
    type: 'draw',
    name: 'Draw'
  }
];

arr.sort((a, b) => b.type.localeCompare(a.type));

console.log(arr);
0
Robby Cornelissen 27 czerwiec 2017, 08:29

Możesz po prostu iterować i umieścić je bezpośrednio:

let arr = [];
selections.forEach(s => {
    if (s.type === "HOME") arr[0] = s;
    if (s.type === "DRAW") arr[1] = s;
    if (s.type === "AWAY") arr[2] = s;
})

Następnie arr będzie na właściwej kolejności.

0
altschuler 27 czerwiec 2017, 08:25