Je veux la clé maximale d'un objet dans un tableau en Javascript, voici l'exemple d'un tableau de JSON. J'ai essayé avec la fonction Reduce () ES6, mais elle ne reviendra que sur enregistrement, alors aidez-moi à obtenir le maximum de non. du tableau de clés, je fournit également la sortie de ce que je veux, ce sera génial si la solution dans les fonctions d'ordre élevé (ES6)
let data = myArray.reduce(function(prev, curr) { return prev.key > curr.key ? prev : curr; });
J'ai essayé avec la fonction de réduction mais n'obtient qu'un seul enregistrement p >
let arr = [{ key : 1, name : 'testaa', dept : 'ggg' }, { key : 1, name : 'testaa', dept : 'ggg' }, { key : 2, name : 'testaa', dept : 'ggg' }, { key : 2, name : 'testaa', dept : 'ggg' }, { key : 2, name : 'testaa', dept : 'ggg' }, { key : 3, name : 'testaa', dept : 'ggg' }, { key : 3, name : 'testaa', dept : 'ggg' }] output i want maximum key of array: arr = [{ key : 3, name : 'testaa', dept : 'ggg' }, { key : 3, name : 'testaa', dept : 'ggg' }]
4 Réponses :
Vous ne renvoyiez que la dernière clé supérieure. Vous devez construire un tableau contenant tous les éléments qui ont la clé la plus élevée.
Dans mon algorithme, je stocke la clé la plus élevée dans un tableau, lorsque je rencontre un élément avec une clé plus élevée que les éléments que j'ai stockés, je fouette le tableau et recréez-en un.
const arr = [{ key: 1, name: 'testaa', dept: 'ggg' }, { key: 1, name: 'testaa', dept: 'ggg' }, { key: 2, name: 'testaa', dept: 'ggg' }, { key: 2, name: 'testaa', dept: 'ggg' }, { key: 2, name: 'testaa', dept: 'ggg' }, { key: 3, name: 'testaa', dept: 'ggg' }, { key: 3, name: 'testaa', dept: 'ggg' }]; const higherKey = arr.reduce((tmp, x) => { if (!tmp.length || tmp[0].key < x.key) { return [x]; } if (tmp[0].key === x.key) { tmp.push(x); } return tmp; }, []); console.log(higherKey);
Vous pouvez le faire en deux étapes:
Math.max
.filter ()
let arr = [{ key: 1, name: 'testaa', dept: 'ggg' }, { key: 1, name: 'testaa', dept: 'ggg' }, { key: 2, name: 'testaa', dept: 'ggg' }, { key: 2, name: 'testaa', dept: 'ggg' }, { key: 2, name: 'testaa', dept: 'ggg' }, { key: 3, name: 'testaa', dept: 'ggg' }, { key: 3, name: 'testaa', dept: 'ggg' }]; let max = Math.max(...arr.map(item => item.key)); console.log(arr.filter(item => item.key === max));
Merci Serge K pour la solution, je suis d'accord avec votre solution mais, vous itérez deux fois une pour map () et une autre pour filter (), nous pouvons le faire en fonction reduction () une seule itération.
@sarveshkumar Voir la réponse de Gregory NEUT
let arr = [{ key : 1, name : 'testaa', dept : 'ggg' }, { key : 1, name : 'testaa', dept : 'ggg' }, { key : 3, name : 'testaa', dept : 'ggg' }, { key : 2, name : 'testaa', dept : 'ggg' }, { key : 2, name : 'testaa', dept : 'ggg' }, { key : 8, name : 'testaa', dept : 'ggg' }, { key : 3, name : 'testaa', dept : 'ggg' }] let max = arr[0]; let data = arr.forEach(function(curr,index) { if(max.key < curr.key) { max = curr; } }); result = arr.map((item) => { return item.key === map.key; }); console.log(result) I would suggest to use two loops one for finding out the max key and then filter those keys, complexity would be o(n)
Si vous souhaitez utiliser réduire
, en une seule itération, vous pouvez l'utiliser comme ça (c'est vraiment verbeux, vous pouvez simplifier si vous le souhaitez):
let data = arr.reduce(function(acc, curr) { // If there is not data on the accumulator, add the first element if (acc.length === 0) { acc.push(curr); return acc; } // if current key is smaller than the stored one, clear and start a new accumulator if (acc[0].key < curr.key) { acc = []; acc.push(curr); } // If key is the same than the stored one, add it to the accumulator else if(acc[0].key === curr.key) { acc.push(curr); } // Return the accumulator return acc; }, []);
{key = 1, name = 'testaa', dept = 'ggg'}
n'est pas une syntaxe valide=
doit être:
Réduire ne retournera qu'une seule valeur ..... et vous ne définissez pas le réducteur avec une valeur par défaut pour démarrer ....
Vous dites que vous voulez la clé maximale. Votre appel de réduction renvoie la touche maximale. Alors que voulez-vous d'autre (quand vous dites "un seul")?