-5
votes

Comment trier un objet complexe par une valeur imbriquée

J'ai du mal à essayer de trier un objet complexe. Ceci est la structure d'objet: xxx

essentiellement, il s'agit d'un tableau d'objets contenant une propriété appelée "SearchResultProperties", qui est une gamme d'objets avec des propriétés "Key" et "Value".

J'essaie de trier la propriété "Touche", c'est-à-dire: "Taille_byte avg".


3 commentaires

Pouvez-vous s'il vous plaît postez également votre tentative?


Pas clair. Voulez-vous trier les objets dans la matrice, par l'une de leurs propriétés, ou vous souhaitez trier les propriétés de l'objet, ce qui semble être une chose étrange à faire?


Je veux trier les objets en tableau en fonction de l'une des propriétés.


3 Réponses :


2
votes

Vous pouvez utiliser la fonction arra.prototype.sort () code> qui vous donne deux objets et vous pouvez renvoyer une valeur de + ve ou -ve en fonction de votre logique pour trier. Reportez-vous à [ https: //developer.mozilla. Org / fr-US / DOCS / Web / JavaScript / Référence / Global_Objects / Array / Trier ]

array = [{
    "searchResultProperties": [{
        "key": "message_time",
        "value": 1542088800000
    }, {
        "key": "size_byte AVG",
        "value": 480
    }, {
        "key": "source_file",
        "value": "log"
    }, {
        "key": "source_host",
        "value": "lab8.domain.com"
    }],
    "show": false,
    "key": null,
    "type": null
}, {
    "searchResultProperties": [{
        "key": "message_time",
        "value": 1542096000000
    }, {
        "key": "size_byte AVG",
        "value": 373
    }, {
        "key": "source_file",
        "value": "log"
    }, {
        "key": "source_host",
        "value": "lab8.domain.com"
    }],
    "show": false,
    "key": null,
    "type": null
}, {
    "searchResultProperties": [{
        "key": "message_time",
        "value": 1542103200000
    }, {
        "key": "size_byte AVG",
        "value": 683
    }, {
        "key": "source_file",
        "value": "log"
    }, {
        "key": "source_host",
        "value": "lab8.domain.com"
    }],
    "show": false,
    "key": null,
    "type": null
}]

array = array.sort((a,b) => a.searchResultProperties.find(obj => obj.key === "size_byte AVG").value - b.searchResultProperties.find(obj => obj.key === "size_byte AVG").value )

console.log(array);


5 commentaires

J'écris une réponse et je voulais donner une réponse rapide dans la période moyenne afin que l'auteur puisse tenter de lui-même


N'expliquez toujours pas pourquoi votre code aide l'OP et ce que OP s'est trompé


@Calvinnunes L'OP n'a pas partagé son code. Donc, je ne peux jamais dire ce qu'il faisait mal!


Le code aide parce qu'il fonctionne et trie! C'est une solution d'une ligne! Pourquoi vous attendriez-vous que je complique et écrivez un essai lorsque le code fait sa propre parole!


OK, vous avez maintenant un texte qui explique ce que faire votre code et aider à comprendre l'utilisation de votre code.



1
votes

Vous pouvez utiliser Trier code> et Trouver code>

Trier prend deux valeurs comme argument. Avec la recherche, nous trouvons l'élément de tableau avec clé 'Taille_byte avg' code> et retirez la valeur de celui-ci et comparez les valeurs P>

p>

let arr = [{"searchResultProperties": [{"key": "message_time","value": 1542088800000}, {"key": "size_byte AVG","value": 480}, {"key": "source_file",       "value": "log"}, {"key": "source_host","value": "lab8.domain.com"}],"show": false,"key": null, "type": null}, { "searchResultProperties": [{"key": "message_time","value": 1542096000000}, {"key": "size_byte AVG","value": 373}, {"key": "source_file","value": "log"}, {"key": "source_host","value": "lab8.domain.com"}],"show": false,"key": null, "type": null}, {"searchResultProperties": [{"key": "message_time","value": 1542103200000}, {"key": "size_byte AVG","value": 683 }, { "key": "source_file","value": "log"}, {"key": "source_host","value": "lab8.domain.com"}],"show": false,"key": null,"type": null}]

let op = arr.sort((a,b)=>
         a.searchResultProperties.find(e=>e.key==='size_byte AVG').value -
         b.searchResultProperties.find(e=>e.key==='size_byte AVG').value)

console.log(op)


2 commentaires

Merci! Mais celui-ci ne fonctionne pas pour le champ "source_file" car ce n'est pas un int.


@ Pennywise83 Ceci peut être facilement modifié maintenant en fonction de la nécessité, n'est-ce pas? BTW Vous pouvez utiliser intl.collator si vous voulez que cela fonctionne pour les deux.



2
votes

Vous pouvez utiliser la fonction trouver code> pour rechercher les objets avec la touche Taille_byte avg code> et la fonction Trier code> pour trier le tableau.

cette approche trie dans la direction ascendante em> p>

p>

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


0 commentaires