2017-10-20 1 views
0

Je suis nouveau sur JavaScript. Je suis actuellement à obj avec des fonctions. J'ai ce code:Après avoir trié un tableau d'objets en JavaScript, comment afficher le mode de tri opposé? (mise à jour)

var tableIn = [ 
 
    {name: "Alaska Thunderfuck", itemsBought: 15}, 
 
    {name: "Courtney Act", itemsBought: 20}, 
 
    {name: "Bianca del Rio", itemsBought: 13} 
 
]; 
 
//going to use loops to limit input to specific words 
 
var question1= prompt("By what to sort? type in : name or items bought").toLowerCase(); 
 
var question2= prompt("How to sort? up/down:").toLowerCase(); 
 

 

 
function myFunction(question1, question2) { 
 
tableIn.sort(function sortingA(x,y) { 
 
    if (question2 == "up") { 
 
     if (question1 == "name") { 
 
     var ayy = x.name.toLowerCase(); 
 
     var byy = y.name.toLowerCase(); 
 
      if (ayy < byy) {return -1;} 
 
      if (ayy > byy) {return 1;} 
 
      return 0; 
 
     } else { 
 
     return x.itemsBought - y.itemsBought; 
 
     } 
 
    } 
 
      }); 
 
tableIn.sort(function sortingD(x,y) { 
 
    if (question2 == "down") { 
 
    return -1 * sortingA(x,y); 
 
    } 
 
}); 
 
for (var idx = 0; idx < tableIn.length; idx++) { 
 
    console.log(tableIn[idx].name + tableIn[idx].itemsBought); 
 
} 
 
} 
 
myFunction(question1, question2);

Comment puis-je obtenir le deuxième travail partiel? l'option inverse

+1

Ouais! Vous auriez toujours pu faire une boucle inverse. pour '(var idx = tableIn.length - 1; idx> = 0; idx -)'. Bien que vous auriez pu le trier correctement en premier lieu. –

Répondre

0

Pour inverser l'ordre d'un tableau trié, utilisez Array#reverse - tableIn.revese().

Pour trier dans la direction opposée, multipliez le résultat de votre fonction sortAsc par -1.

Par exemple:

var question1 = "name"; 
 

 
function sortAsc(x, y) { 
 
    if (question1 == "name") { 
 
     var ayy = x.name.toLowerCase(); 
 
     var byy = y.name.toLowerCase(); 
 
     if (ayy < byy) { 
 
     return -1; 
 
     } 
 
     if (ayy > byy) { 
 
     return 1; 
 
     } 
 
     return 0; 
 
    } else { 
 
     return x.itemsBought - y.itemsBought; 
 
    } 
 
} 
 

 
function sortFunc(x, y) { 
 
    var factor = question2 == "up" ? 1 : -1; 
 
    return factor * sortAsc(x, y); 
 
} 
 

 
var tableIn = [ 
 
    {name: "Alaska Thunderfuck", itemsBought: 15}, 
 
    {name: "Courtney Act", itemsBought: 20}, 
 
    {name: "Bianca del Rio", itemsBought: 13} 
 
]; 
 

 
var question2 = "up"; 
 
console.log('sortAsc: ', tableIn.sort(sortFunc)); 
 

 
var question2 = "down"; 
 
console.log('sortDesc: ', tableIn.sort(sortFunc));

+0

Mais pour l'ordre décroissant je voudrais "vers le bas" pour l'entrée. où devrais-je mettre l'instruction if pour question2 == "down"? – AJH

+0

donc ce que je lutte avec est d'obtenir l'ordre croissant si question2 == "haut" et l'ordre décroissant si question2 == "bas". J'essaie de contourner les instructions ** if ** pour cela, mais dans votre version l'instruction if dont j'ai besoin se trouve dans la fonction sortAsc – AJH

+0

Vous devez prendre le 1er état 'if' de' sortAsc', et utilisez-le pour décider si vous voulez multiplier par 1 ou -1. Voir le code mis à jour. –

0

Essayez de changer return x.itemsBought - y.itemsBought;

à return (x.itemsBought - y.itemsBought) * -1;