0
votes

Trier l'objet Array à l'aide d'un autre tableau

pas capable de trier l'objet Array en fonction de la matrice donnée Pouvez-vous s'il vous plaît m'aider !!

lien de référence p> xxx pré> J'ai besoin de résultat trié comme si mon deuxième matrice est, puis après d'autres données: p> xxx pré>

mais je reçois en dessous des résultats ne recevant pas de données triées correctes: P>

[{
    parent_email:"testuser@mailinator.com",
    childSurName:null,
    childFirstName:null,
    id:22
 },
 {
    parent_email:"p20@mailinator.com",
    childSurName:null,
    childFirstName:"Sachidanand",
    id:31
 },
 {
    parent_email:"aa@aa.aaa",
    childSurName:null,
    childFirstName:null,
    id:26
 }]


2 commentaires

"22"! == 22 de sorte que votre indexof ne trouve pas les identifiants


@Vlaz ok me permet d'éditer la question alors.


3 Réponses :


0
votes
 const order = [ 31,22 ];

0 commentaires

2
votes

Vous pouvez utiliser un mappe code> et Placez les valeurs avec priorité code> à l'intérieur de la carte, puis trier,

Note: - STRUT> DON ' t oublie de garder la valeur de recherche et la touche de même type p>

p>

const data = [{parent_email: 'testuser@mailinator.com',childSurName: null,childFirstName: null,id: 22},{parent_email: 'p20@mailinator.com',childSurName: null,childFirstName: 'Sachidanand',id: 31},{parent_email: 'aa@aa.aaa',childSurName: null,childFirstName: null,id: 26}];

const order = ['31', '22'];
const mapper = new Map(order.map((v, i) => [parseInt(v), i + 1]))

const sorted = data.sort((a, b) => (
  (mapper.get(a.id) || Infinity) - (mapper.get(b.id) || Infinity)
));

console.log(sorted)


0 commentaires

0
votes

Le problème est dû à l'identifiant 22 code>. Il n'existe pas dans Commander code> Array et indexof code> Retour de fonction -1 code> pour cet identifiant. Cela signifie la priorité supérieure code>, il apparaît donc dans la première place de la matrice de résultat. Vous devez gérer des identifiants qui n'existent pas dans le tableau code> (code>. Par exemple (pour le tri), vous pouvez faire comme ci-dessous:

const sorted = data.sort((a, b) => {
    let aindex = order.indexOf(a.id);
    let bindex = order.indexOf(b.id);
    if(aindex === -1) return 1;
    if(bindex === -1) return -1;
    return aindex  - bindex;
});


0 commentaires