0
votes

Utilisation d'un tableau de chaînes pour trier un tableau d'objets en JavaScript

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);
}); 


0 commentaires

4 Réponses :


3
votes

Utiliser des cartes et index xxx


2 commentaires

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



1
votes

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))


0 commentaires

2
votes

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; }


0 commentaires

1
votes

Créer un 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.

p>

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));


0 commentaires