-2
votes

Comment extraire des variables d'un tableau en fonction de leur valeur?

J'ai stocké des variables dans un tableau. Maintenant, j'ai besoin d'extraire les variables avec la valeur la plus élevée et de les stocker dans un autre tableau.

Ceci est pour un programme JavaScript en cours d'exécution sur un site wix pour ma fille. P>

var kiara = 1;
var rodeo = 3;
var calypso = 3;
var balthazar = 3;
var mistral = 4;
var saya = 4;
var luna = 4;

var points = [{kiara}, {rodeo}, {calypso}, {balthazar}, {mistral}, {saya}, {luna}],


1 commentaires

Quelle est votre production attendue? Est-ce ceci: [{MISTRAL: 4}, {Saya: 4}, {Luna: 4}] ou ["Mistral", "Saya", "Luna"] ?


4 Réponses :


0
votes

solution ci-dessous. Il y aurait un moyen de le faire avec moins de code, mais cela aura le travail pour vous. Une chose à retenir, car dans les boucles est votre ami lorsque vous travaillez avec des objets.

var kiara = 1;
var rodeo = 3;
var calypso = 3;
var balthazar = 3;
var mistral = 4;
var saya = 4;
var luna = 4;

var points = [{rodeo}, {calypso}, {balthazar}, {mistral}, {saya}, {luna},{kiara}];

var maxNumberArray = [];
var maxNamesArray = []; // ADDED THIS LINE
var max;

for(var char in points){
    for(var name in points[char]){
        if(!max){
            max = points[char][name];
        } else {
            if(max < points[char][name]){
                max = points[char][name];
            }
        }
    }
}

for(var char in points){
    for(var name in points[char]){
        if(points[char][name] === max){
            maxNumberArray.push(points[char]);
            maxNamesArray.push(name); // ADDED THIS LINE
        }
    }
}



console.log(JSON.stringify(maxNumberArray));
console.log(maxNamesArray); // ADDED this LINE


2 commentaires

Et si après cette étape, je veux obtenir un tableau avec juste les noms des variables contenues dans maxnumberarray? I.e. Var Array_Name = [Mistral, Saya, Luna]; ? Merci,


Je viens de créer un nouveau tableau et j'ai ajouté les noms comme je suis allé. J'ai ajouté le commentaire // ajouté cette ligne ... à l'endroit où j'ai apporté les modifications. J'espère que cela aide.



1
votes

Étant donné que votre tableau est commandé, vous savez déjà que la valeur MaxImun se trouve à la dernière position de la matrice. Donc, d'abord, vous pouvez obtenir cette valeur, puis vous pouvez utiliser cette valeur pour filtre éléments dont les valeurs sont égales à celle-ci:

p>

var kiara = 1;
var rodeo = 3;
var calypso = 3;
var balthazar = 3;
var mistral = 4;
var saya = 4;
var luna = 4;

var points = [{saya}, {rodeo}, {mistral}, {balthazar}, {luna}, {kiara}, {calypso}];

// Since array is not ordered, we need to get highest value.
// So, we can get it like this:
let maxVal = points.reduce((max, v) => Math.max(Object.values(v)[0], max), null);
console.log(maxVal);

// Now, filter the array with the highest elements
let highest = points.filter(x => Object.values(x)[0] === maxVal);
console.log(highest)


1 commentaires

Je voudrais vraiment avoir une explication de la raison pour laquelle cela n'est pas utile. Donc, je peux améliorer ou supprimer si correspondent. Est le moins que vous puissiez faire lorsque vous descendez.



0
votes

Voici la façon ES6 de faire des choses. Le cas de bord de la liste n'est pas en ordre de ne pas être pris en charge. Les valeurs les plus élevées peuvent donc être n'importe où. Vous pouvez également le modifier pour obtenir les plus petites valeurs. Si vous avez des questions sur le code, demandez-vous et je vais répondre.

p>

const kiara = 1;
const rodeo = 3;
const calypso = 3;
const balthazar = 3;
const mistral = 4;
const saya = 4;
const luna = 4;


function getNamesWithHighestPoints(points) {
  const hash = {};

  for(let i = 0; i < points.length; i++) {

    let point = points[i];
    let name = Object.keys(point)[0];
    let score = Object.values(point)[0];

    if(hash[score] === undefined) {
      hash[score] = [point];
    }
    else {
      hash[score].push(point);
    }
  }

  let biggestScore = 0;
  Object.keys(hash).forEach(pointKey => {
    if(biggestScore < pointKey) {
      biggestScore = pointKey;
    }
  });
  return hash[biggestScore];
}
const points = [{kiara}, {rodeo}, {calypso}, {balthazar}, {mistral}, {saya}, {luna}];

console.log(getNamesWithHighestPoints(points));


0 commentaires

1
votes

Un moyen est de trouver la plus grande valeur d'abord avec .map et .Reduce fonctionne ensemble. Ensuite, nous pouvons obtenir les objets à partir du tableau Points qui ont leurs premières propriétés avec la valeur de Maxvalue et appuyez sur à un tableau distinct Newarray . < Pré> xxx

résultat sera: [{Mistral: 4}, {Saya: 4}, {Luna: 4}]


0 commentaires