1
votes

Trier l'élément Array par ses valeurs

J'ai un tableau d'éléments qui doivent trier et faire de l'élément sélectionné en haut du tableau.

for (var i = array2.length - 1; i >= 0; i--) {
array1.sort(function(x,y){
    return x.parent_email == rows[i].parent_id ? -1 : y.parent_email ==  rows[i].parent_id ? 1 : 0; 
    });
}

J'ai un autre tableau par lequel l'élément du tableau ci-dessus doit trier. le premier élément est en haut le deuxième est en deuxième position le troisième est en troisième position et ainsi de suite.

[{
    parent_email: 'fam@gmail.com',
    id: 221,
    unreadCount: 0 
 },
 {
    parent_email: 'ffff@gmail.com',
    id: 225,
    unreadCount: 0 
 },
 {
    parent_email: 'sumanaqqq@ius.com',
    id: 210,
    unreadCount: 0 
 },
 {
    parent_email: 'dsa@hsah.com',
    id: 143,
    unreadCount: 0 
 },
 {
    parent_email: 'fggfdfg@gmail.com',
    id: 224,
    unreadCount: 0 
 }]

mon tableau de résultats devrait être comme

[{ 
    parent_id: 'fam@gmail.com'
 },
 { 
    parent_id: 'ffff@gmail.com'
 },
 { 
    parent_id: 'sumanaqqq@ius.com'
 }]


0 commentaires

4 Réponses :


2
votes

Vous devez trier le premier tableau par l'index dans le deuxième tableau:

 const emailRank = new Map();
 for(const [index, { parent_id }] of array2.entries())
   emailRank.set(parent_id, index);

 array1.sort((a, b) => emailRank.get(b.parent_email) - emailRank.get(a.parentEmail));


0 commentaires

0
votes

Essayez de trier dans lodash

_.sortBy( parent_email, [function(o) { return o.parent_email; }]);


2 commentaires

attention, vous n'utilisez pas le tableau avec parent_id


je donne juste des informations. changez-le simplement pour Parent_id si vous le voulez



0
votes

Pour moi, cela ne ressemble pas exactement au tri (lorsque vous récupérez les éléments correspondants dans l'ordre souhaité et que vous ne vous souciez pas de l'ordre du reste), alors vous pouvez aller, comme (cependant, cela peut produire une sortie inattendue en cas de duplication des e-mails):

.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}
const src = [
  {parent_email: 'fam@gmail.com', id: 221, unreadCount: 0},
  {parent_email: 'ffff@gmail.com', id: 225, unreadCount: 0},
  {parent_email: 'sumanaqqq@ius.com', id: 210, unreadCount: 0},
  {parent_email: 'dsa@hsah.com', id: 143, unreadCount: 0},
  {parent_email: 'fggfdfg@gmail.com', id: 224, unreadCount: 0}
];
const order = [
  {parent_id: 'fam@gmail.com'},
  {parent_id: 'ffff@gmail.com'},
  {parent_id: 'sumanaqqq@ius.com'}
];
const res = order
  .map(item => src.find(entry => entry.parent_email == item.parent_id))
  .concat(src.filter(entry => !order.map(item => item.parent_id).includes(entry.parent_email)));

console.log(res);


0 commentaires

0
votes

const data = [{
    parent_email: 'dsa@hsah.com',
    id: 143,
    unreadCount: 0
  },
  {
    parent_email: 'sumanaqqq@ius.com',
    id: 210,
    unreadCount: 0
  },
  {
    parent_email: 'ffff@gmail.com',
    id: 225,
    unreadCount: 0
  },
  {
    parent_email: 'fam@gmail.com',
    id: 221,
    unreadCount: 0
  },
  {
    parent_email: 'fggfdfg@gmail.com',
    id: 224,
    unreadCount: 0
  }
]
const orderBy = [{
    parent_id: 'fam@gmail.com'
  },
  {
    parent_id: 'ffff@gmail.com'
  },
  {
    parent_id: 'sumanaqqq@ius.com'
  }
]
const length = data.length
const dataOrders = orderBy.reduce((result, item, index) => (result[item.parent_id] = index + 1) && result, {})
const dataOrdered = data.sort((a, b) => (dataOrders[a.parent_email] || length) - (dataOrders[b.parent_email] || length))
console.log(dataOrdered)


0 commentaires