Je ne sais pas comment trier les nombres impairs par ordre décroissant à droite des nombres pairs. Je suis un peu coincé ici, je sais qu'il me manque quelque chose.
Ma sortie est comme ceci: [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
Cela devrait être comme ceci: [2, 4, 6, 8, 10, 9, 7, 5, 3, 1]
var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
n.sort(function(a, b) {
return a % 2 - b % 2 || b % 2 - a % 2;
});
console.log(n);
5 Réponses :
Avez-vous essayé de diviser le tableau en deux tableaux (un pour pair et un pour impair), puis trier chacun comme vous le souhaitez et les rejoindre à l'aide de l'opérateur de propagation [... pair, ... impair]
var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var even = n.filter(a => a % 2 == 0).sort(); var odd = n.filter(a => a % 2 != 0).sort().reverse(); var numbers = [...even, ...odd];
Une solution simple et très coûteuse serait de construire deux tableaux, de les trier puis de les concaténer, mais vous pouvez combiner les deux tests et trier sur place comme ceci:
let arr = Array.from({length:10}, (_,i)=>i+1)
arr.sort((a,b)=> (a%2-b%2) || (a%2 ? b-a : a-b))
console.log(arr)Comme vous pouvez le voir , le modèle de tri hiérarchique est simplement
arr.sort(compareA || compareB)
que vous pouvez généraliser pour plus de conditions.
arr.sort((a,b)=> (a%2-b%2) || (a%2 ? b-a : a-b))
Le code ne donne pas la sortie correcte. les nombres impairs doivent être dans l'ordre décroissant
Vous avez probablement mal compris. Voir les commentaires ce qu'OP a dit.
Vous pouvez utiliser filter () pour obtenir différents tableaux de nombres pairs et impairs, puis les trier et les joindre en utilisant Spread Operator
var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let odd = n.filter(x => x % 2).sort((a,b) => b-a); let even = n.filter(x => !(x % 2) ).sort((a,b) => a-b); let res = [...even,...odd] console.log(res);
C'est plus cher que nécessaire
Vous pouvez filtrer les cotes et les égalités et, les trier et enfin concaténer les deux tableaux.
.as-console-wrapper { min-height: 100%; }
let n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let odds = n.filter((a) => a % 2 !== 0).sort((a, b) => b - a); let even = n.filter((a) => a % 2 === 0).sort((a, b) => a - b); let sorted = even.concat(odds); console.log(sorted);
OP: quelque chose comme ça [2, 4, 6, 8, 10, 9, 7, 5, 3, 1] - Les chances doivent également diminuer.
merci beaucoup, cela a fonctionné pour moi et j'ai compris où je me suis trompé
Vous pouvez séparer deux tableaux et les fusionner par opérateur de répartition.
var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; odd = n.filter (v => v % 2); odd.sort((a,b) => b-a); //console.log(odd) even = n.filter (v => !(v % 2)); even.sort((a,b) => a-b); //console.log(even); console.log([...even,...odd]);
let n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; let odd = n.filter (v => v % 2); odd.sort((a,b) => b-a); //console.log(odd) let even = n.filter (v => !(v % 2)); even.sort((a,b) => a-b); //console.log(even); console.log([...even,...odd]);
Vous déclarez des variables globales implicites. Et il n'y a pas non plus de différence entre la mienne et votre réponse. Je pense que tu n'as pas vu le mien.
J'ai mis à jour la réponse, bien sûr, je ne connaissais pas votre réponse avant
J'ai supprimé le vote défavorable. Mais ce n'est pas agréable de dupliquer les réponses. Je ne dis pas que vous avez copié le mien. vous n'en avez pas besoin. Mais donner une réponse qui est exactement la même que les autres n'est pas si agréable. Utilisez let dans votre extrait
quand j'écris du code dans l'extrait, il est en plein écran, je ne vois pas ta réponse, tu ne devrais pas penser comme ça
Je ne comprends aucun problème.