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'
}]
4 Réponses :
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));
Essayez de trier dans lodash
_.sortBy( parent_email, [function(o) { return o.parent_email; }]);
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
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);
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)