Je parviens cependant à trouver les valeurs les plus importantes de l'objet. Il y a un problème, et c'est l'impossibilité d'afficher la clé associée avec cette valeur.
var result = {
t6: 101,
t5: 45,
t2: 33
}
Il peut afficher les premières valeurs, mais j'ai du mal à afficher les clés avec ça.
Le résultat devrait être comme
var obj = {
t1: 1,
t2: 33,
t3: 10,
t4: 9,
t5: 45,
t6: 101
//...
}
// create an array
var arr = [];
// loop through the object and add values to the array
for (var p in obj) {
arr.push(obj[p]);
}
// sort the array, largest numbers to lowest
arr.sort(function(a,b){return b - a});
// grab the first 10 numbers
var firstThree = arr.slice(0, 3);
console.log(firstThree);
7 Réponses :
Vous pouvez pousser des objets dans un tableau au lieu de valeurs, afin de pouvoir stocker des clés
var obj = {
t1: 1,
t2: 33,
t3: 10,
t4: 9,
t5: 45,
t6: 101
}
// create an array
var arr = [];
// loop through the object and add values to the array
for (var p in obj) {
arr.push({key: p, value: obj[p]});
}
// sort the array, largest numbers to lowest
arr.sort(function(a,b){return b.value - a.value});
// grab the first 10 numbers
var firstThree = arr.slice(0, 3);
console.log(firstThree);
Vous pouvez pousser dans votre tableau un objet contenant l'association clé-valeur arr.push ({p: obj [p]})
var obj = {
t1: 1,
t2: 33,
t3: 10,
t4: 9,
t5: 45,
t6: 101
}
// create an array
var arr = [];
// loop through the object and add values to the array
for (var p in obj) {
arr.push({
p: obj[p]
});
}
// sort the array, largest numbers to lowest
arr.sort(function(a, b) {
return b - a
});
// grab the first 10 numbers
var firstThree = arr.slice(0, 3);
console.log(firstThree);
Rien d'extraordinaire mais fait le travail :-)
Vous pouvez obtenir les entrées, les trier et les découper et créer un nouvel objet en attribuant des objets mappés à un seul objet.
var object = { t1: 1, t2: 33, t3: 10, t4: 9, t5: 45, t6: 101 },
result = Object.assign( // collect all objects into a single obj
...Object // spread the final array as parameters
.entries(object) // key a list of key/ value pairs
.sort(({ 1: a }, { 1: b }) => b - a) // sort DESC by index 1
.slice(0, 3) // get first three items of array
.map(([k, v]) => ({ [k]: v })) // map an object with a destructured
); // key/value pair
console.log(result);
Assez difficile à comprendre même avec des commentaires, mais cela fonctionne, j'ai essayé de m'asseoir avec et de jouer avec console.log mais je ne comprends toujours pas vraiment comment ça marche, comme pourquoi sort a {1: a}, {1: b}.
il s'agit d'une affectation de déstructuration avec un tableau pour les deux paramètres, où les tableaux sont déstructurés en un objet avec une clé 1 et renommés en a ou b . pour un seul tableau, il ressemble à ['t6', 101] et le résultat est 101 .
ahw, maintenant cela a du sens. Je connaissais la destruction de l'affectation, mais je ne l'ai utilisé qu'avec des tableaux ou des importations avant :) merci Nina
vous pouvez faire quelque chose comme ceci
var obj = {
t1: 1,
t2: 33,
t3: 10,
t4: 9,
t5: 45,
t6: 101
};
// create an array
var arr = [];
// loop through the object and add values to the array
for (var p in obj) {
arr.push({ key: p, val: obj[p] });
}
// sort the array, largest numbers to lowest
arr.sort(function(a, b) {
return b.val - a.val;
});
// grab the first 10 numbers
var firstThree = arr.slice(0, 3);
console.log(...firstThree);
Vous pouvez d'abord obtenir les valeurs de cet objet et le trier. Puis bouclez sur la valeur-clé de cet objet en utilisant Object.entries () et déterminez la clé de cette valeur qui appartient aux 3 premières valeurs:
{
t2: 33,
t5: 45,
t6: 101
}
Notez également que l'ordre des clés dans l'objet n'a pas vraiment d'importance lorsque vous travaillez avec un objet, donc
{
t6: 101,
t5: 45,
t2: 33
}
est similaire à
var obj = {
t1: 1,
t2: 33,
t3: 10,
t4: 9,
t5: 45,
t6: 101
};
var values = Object.values(obj).sort((a,b) => b-a).slice(0,3);
let resultObj = {};
Object.entries(obj).forEach((item) => {
if(values.indexOf(item[1]) !== -1){
resultObj[item[0]] = item[1];
}
});
console.log(resultObj);
var obj = {
t1: 1,
t2: 33,
t3: 10,
t4: 9,
t5: 45,
t6: 101
};
const sortedKey = Object.keys(obj).sort((a,b)=>{
if(obj[a] > obj[b]) return -1;
if(obj[a] < obj[b]) return 1;
return 0;
})
//print top three key -- val
for(let i=0; i< 3; i++) console.log(sortedKey[i], '--', obj[sortedKey[i]])
Solution alternative utilisant lodash
_.chain(object)
.map((value, key) => ({value, key}))
.sortBy("value")
.reverse()
.take(3)
.reduce((acc, item) => ({ ...acc, [item.key]: item.value}), {})
.value();
Avez-vous besoin que
resultsoit le même objet queobj(avec les autres clés supprimées), ou un objet entièrement nouveau (donc, vous avoir deux)?Quelle que soit la manière la plus efficace, c'est la manière dont je suis après, je veux juste envoyer et objecter avec les valeurs les plus élevées et les clés associées à cela
Double possible de Tri de l'objet JavaScript par valeur de propriété
pas vraiment un doublon, je pense qu'il y a plus simple et plus flexible