Beaucoup de questions Stackoverflow sur les tableaux de tri en JavaScript, mais je n'ai pas pu trouver une question pour ce cas d'utilisation spécifique impliquant un deuxième tableau.
J'ai les 2 tableaux suivants. Un tableau est le tableau principal de données et l'autre matrice est utilisé pour filtrer + Trier le tableau principal: P>
p>
let outputArray = [];
sortingArray.forEach(key => {
let obj = mainArray.filter(row => row.key === key)[0];
outputArray.push(obj);
});
4 Réponses :
Utiliser des cartes et index
Le filtrage n'est pas ma question. Ma question est liée au tri.
Est-ce ce dont vous avez besoin? Maintenant, il retournera selon votre ordre de tri de trier
Pourriez-vous résoudre le problème en inversant votre opération et en effectuant vos actions sur votre tableau de tri?
let sortingArray = ['pts', 'ast', 'reb', 'stl']
let mainArray = [
{ key: 'stl', val1: '3', val2: 5 },
{ key: 'blk', val1: '5', val2: 1 },
{ key: 'pts', val1: '23', val2: 44 },
{ key: 'fgm', val1: '11', val2: 15 },
{ key: 'ast', val1: '13', val2: 15 },
{ key: 'reb', val1: '7', val2: 4 },
];
// Using the 2 arrays above, I am trying to create the following output
let outputArray = [
{ key: 'pts', val1: '23', val2: 44 },
{ key: 'ast', val1: '13', val2: 15 },
{ key: 'reb', val1: '7', val2: 4 },
{ key: 'stl', val1: '3', val2: 5 },
];
outputArray = sortingArray
.map(key => mainArray.filter((row) => key === row.key))
Si vous avez pour toutes les chaînes recherchées, vous pouvez prendre un objet mappe code> et obtenez les objets de la carte.
p>
.as-console-wrapper { max-height: 100% !important; top: 0; } Créer un p> objet code> à partir du MAINARRAY code> et prenez les valeurs de cet objet code>.
En faisant cela, vous pouvez éviter de courir les boucles imbriquées. let sortingArray = ['pts', 'ast', 'reb', 'stl']
let mainArray = [
{ key: 'stl', val1: '3', val2: 5 },
{ key: 'blk', val1: '5', val2: 1 },
{ key: 'pts', val1: '23', val2: 44 },
{ key: 'fgm', val1: '11', val2: 15 },
{ key: 'ast', val1: '13', val2: 15 },
{ key: 'reb', val1: '7', val2: 4 },
];
function getResultant(sortingArray, mainArray) {
const objFromArray = mainArray.reduce((acc, item) => {
acc[item.key] = item;
return acc;
}, {});
return sortingArray.map(item => objFromArray[item]);
}
console.log(getResultant(sortingArray, mainArray));