0
votes

Tri des objets par nom d'objet Typescript

Utilisation de documents, j'essaie de trier un tableau d'objets par le nom de l'objet réel, pas une clé d'objet. Une clé de nom existe également sur ces objets également, c'est le même nom de l'objet réel. J'essaie de voir où je vais mal avec ma logique ici. J'ai tenté de trier par la clé de nom de l'objet sans succès.

J'ai essayé d'utiliser la fonction .sort () de plusieurs manières. P>

Un exemple de tableau est comme suit: P >

templateReports = [

{"Department Report": {name: "Department Report", docType: "Department"}},
{"Project Report": {name: "Project Report", docType: "Project"}},
{"Room Report": {name: "Room Report", docType: "Room"}}

]


2 commentaires

S'il vous plaît poster le résultat que vous souhaitez obtenir.


J'ai eu ceci pour travailler en procédant comme suit: this.templateère.sort (((A, B) => (objet.keys (a) [0]> objet.keys (b) [0])? 1: ((Objet.keys (b) [0]> objet.keys (a) [0])? -1: 0));


3 Réponses :


0
votes

Pour répondre à votre question, vous pouvez obtenir la clé d'objet en appelant objet.keys (obj) [0] qui obtient la première clé énumérable. Étant donné que chacun de ces objets a exactement une paire de forces de clé, cela fonctionnera bien. Si vous ajoutez une deuxième paire de forces de clé, cela ne fonctionnera pas.

Ma prochaine question, c'est pourquoi les objets sont dans cette configuration en premier lieu? Considérant que les touches d'objet sont simplement la valeur nom répétée, je penserais qu'il serait plus logique d'avoir un tableau des objets, non? Je ne sais pas ce que vous gagnez d'avoir chaque objet imbriqué dans un deuxième objet.


0 commentaires

1
votes

Lorsque vous avez un objet comme celui-ci:

function getName(o) {
    return Object.keys(o)[0];
}

templateReports.sort((first, second) => getName(first).localeCompare(getName(second)));


0 commentaires

1
votes

C'est une structure d'objet étrange.

Vous pouvez le faire - mais vous devez déterminer ce que l'accesseur de la propriété devrait être. Comment définissez-vous cette clé de chaque objet? P>

Vous pouvez utiliser la première clé de l'objet: ( Disclaimer - est-ce maintenable?) STRUT> P>

const accessSortingKey(object: Object): string {
    const key = Object.keys(object)[0];
    return key;
} 

const weirdArray = [
    {"Project Report": {name: "Project Report", docType: "Project"}},
    {"Department Report": {name: "Department Report", docType: "Department"}},
    {"Room Report": {name: "Room Report", docType: "Room"}}
];

weirdArray.sort((a, b) => {
   const aVal = accessSortingKey(a);
   const bVal = accessSortingKey(b);

   return aVal > bVal ? 1 : aVal < bVal ? -1 : 0;


0 commentaires