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> 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
}]
3 Réponses :
const order = [ 31,22 ];
Vous pouvez utiliser un p> mappe code> et
Placez les valeurs avec priorité code> à l'intérieur de la carte, puis trier,
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)
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;
});
"22"! == 22 code> de sorte que votre
indexof code> ne trouve pas les identifiants
@Vlaz ok me permet d'éditer la question alors.