2017-08-30 3 views
1

récemment je construis une petite application web et j'ai un tableau d'objets tels queJavascript-- trier un tableau d'objets avec un ordre spécifique des propriétés de l'objet

[ 
    { 
     id: '3', 
     semester: 'summer freshman', 
     rating: '10' 
    }, 
    { 
     id: '4', 
     semester: 'spring freshman', 
     rating: '9.5' 
    }, 
    { 
     id: '5', 
     semester: 'fall freshman', 
     rating: '10' 
    } 
] 

, comment je trier mes données dans un ordre tel que les entrées avec semester == fall freshman viennent en premier, suivies des entrées avec semester == spring freshman, et enfin semester == summer freshman.

En d'autres termes, est-il possible de trier mes tableau d'objets en fonction des valeurs de la propriété semestre de chaque objet tel qu'il suit cet ordre:

["fall freshman", "spring freshman", "summer freshman", "fall sophomore" ...] 

Merci !!

+0

Pouvez-vous s'il vous plaît partager ce que vous avez essayé? – Rajesh

Répondre

4

Vous pouvez utiliser une méthode de tri personnalisée. Gardez un tableau de semestres avec votre commande désirée. Puis trier votre tableau en fonction du tableau semester.

let arr = [ 
    {id: '3', semester:'summer freshman', rating: '10'}, 
    {id: '4', semester: 'spring freshman', rating: '9.5'}, 
    {id:'5', semester:'fall freshman', rating: '10'} 
] 

const semesterList = ["fall freshman", "spring freshman", "summer freshman", "fall sophomore"] 

arr.sort((a, b) => semesterList.indexOf(a.semester) - semesterList.indexOf(b.semester)) 
+0

C'est exactement ce que je cherche. Merci beaucoup!! – Yudi

0

Vous pouvez utiliser un objet pour l'ordre de tri et prendre une valeur par défaut pour les valeurs inconnues. Avec order.default, vous pouvez obtenir des valeurs inconnues et prendre zéro ou une valeur inférieure à zéro pour passer en haut ou une valeur vraiment élevée, comme Infinity pour déplacer l'élément vers le bas.

Pour les valeurs connues, je suggère d'utiliser une valeur différente de zéro, car zéro ou un résultat inconnu donne la valeur par défaut.

var data = [{ id: '3', semester: 'summer freshman', rating: '10' }, { id: '4', semester: 'spring freshman', rating: '9.5' }, { id:'5', semester: 'fall freshman', rating: '10' }, { id:'99', semester: 'foo freshman', rating: '0' }], 
 
    semesters = ["fall freshman", "spring freshman", "summer freshman", "fall sophomore"], 
 
    order = Object.create(null); 
 
    
 
    
 
order.default = Infinity; 
 
semesters.forEach((s, i) => order[s] = i + 1); 
 

 
data.sort((a, b) => (order[a.semester] || order.default) - (order[b.semester] || order.default)); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }