J'ai trouvé quelques réponses à cette question, mais pour une raison quelconque, cela n'a pas fonctionné pour moi.Trier un tableau complexe d'objets en utilisant un attribut booléen en JavaScript
J'ai un grand nombre d'objets qui doivent être triés par une propriété booléenne (tous ceux qui sont true
doivent apparaître en premier). La réponse la plus populaire que je trouve est:
let myList = [
{
thing: <div>Something</div>,
sortingAttribute: false
},
{
thing: <div>Something else</div>,
sortingAttribute: true
},
{
thing: <div>Whatever</div>,
sortingAttribute: true
}
.
.
.
]
myList.sort((x, y) => {
return (x.sortingAttribute === y.sortingAttribute) ? 0 : x ? -1 : 1
})
Malheureusement, cela ne fonctionne pas et je l'ai essayé de faire quelques variations de celui-ci, en vain.
Une alternative à ce fait simplement:
myList.sort((x, y) => {return x.sortingAttribute - y.sortingAttribute})
Cependant, il n'a pas non plus travaillé. J'ai également essayé d'utiliser la fonction sortBy de underscore, mais rien.
Je ne pense pas que cela ait quelque chose à voir avec cela, mais avant d'essayer de trier, je fais un .map()
sur une autre liste pour obtenir myList
comme c'est maintenant. Serait-ce en quelque sorte la cause du problème? A part ça, c'est assez simple.
Voici la fonction complète:
getMyList (basicArray) {
let myList = basicArray.map((arr, key) => {
const sortingAttribute = key > 2 // just used for the example
// the real code would obviously generate a more random order of trues and falses
// do other stuff
return {
thing: (<div key={key}>{stuff}</div>),
sortingAttribute: sortingAttribute
}
})
myList.sort((x, y) => {
return (x.isQualified === y.isQualified) ? 0 : x ? -1 : 1
})
console.log('myList SORTED', myList)
}
Actuellement qui affiche exactement l'ordre qui a été craché du .map()
Donc, pour un tableau de taille 5, nous avons:
faux , false, false, true, true
fais-tu 'myList = myList.sort ((x, y) => {return x.sortingAttribute - y.sortingAttribute})'? –
@Keith qui a fonctionné! Merci! Si tu veux, mais comme réponse, je peux le marquer. – theJuls
en fonction de vos résultats, vous pouvez simplement appeler array.reverse(), alors votre sortie serait vrai, vrai, faux, faux, faux –