2014-12-02 5 views
1

Привет У меня есть массив объектовКак отсортировать массив объекты базы по двум свойствам

cards = [ 
{ Asset: "2C.jpg", 
    CardName: "2C", 
    CardPlayed: 0, 
    Playbell: 0, 
    PlayerName: "player1", 
    Rank: 2, 
    Suit: "C" 
}, 
{ Asset: "9S.jpg", 
    CardName: "9S", 
    CardPlayed: 0, 
    Playbell: 0, 
    PlayerName: "player2", 
    Rank: 9, 
    Suit: "S" 
}, 
{ Asset: "6D.jpg", 
    CardName: "6D", 
    CardPlayed: 0, 
    Playbell: 0, 
    PlayerName: "player1", 
    Rank: 6, 
    Suit: "D" 
}]; 

и мне нужно отсортировать эти объекты базы на Suit собственности, но только для объекта, которые имеют значение PlayerName свойства, равное "player1" и большое спасибо за любую помощь.

ответ

2

для сортировки массива по PlayerName, а затем Suit:

cards.sort(function(x, y){ 
    return (
    x.PlayerName < y.PlayerName ? -1 : 
    x.PlayerName > y.PlayerName ? 1 : 
    x.Suit < y.Suit ? -1 : 
    x.Suit > y.Suit ? 1 : 
    0 
); 
}); 
0
var filtered = cards.filter(function(card){ 
    return card.PlayerName === "player1"; 
}); 

var sorted = filtered.sort(function(a,b){ 
    if (a.Suit > b.Suit) { 
    return 1; 
    } 
    if (a.Suit < b.Suit) { 
    return -1; 
    } 
    // a must be equal to b 
    return 0; 
}); 

Согласно MDN фильтр не работает на ie8 и ниже, вы можете использовать polyfill, как указано на https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/filter, или вы могли бы перебрать все элементы и фильтровать их вручную, как это:

var filtered = []; 
for (var i in cards){ 
    if (cards[i].PlayerName === "player1"){ 
     filtered.push(cards[i]); 
    } 
} 

// and then sort it like before 
+0

Может быть полезно дать альтернативу фильтра для ECMAScript <5 –