J'ai un tableau comme celui-ci: arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, …}
Et j'essaye d'obtenir la valeur la plus basse avec la clé en utilisant Javascript.
Ce que j'ai essayé:
alert(Math.min.apply(Math, arr));
renvoie Infinity
je ne sais pas pourquoi
Je l'ai obtenu sur Google, juste pour essayer:
var keys = Object.keys(arr).map(Number).filter(function(a){
return arr[a];
}); alert(Math.min.apply(Math, keys));
renvoie également Infinity
Je veux quelque chose de plus complet, comme cette sortie: "La valeur la plus basse est 2 de lst9".
J'ai vraiment essayé de le réparer moi-même avant de demander ici, mais sans succès! Pouvez-vous m'aider à résoudre ce problème "Infinity"? Je vous remercie.
Vous pouvez obtenir la clé et la valeur en utilisant Object.entries
:
var arr = {
lst1: 300,
lst2: 381,
lst3: 4,
lst4: 4,
lst5: 49
};
function lowestValueAndKey(obj) {
var [lowestItems] = Object.entries(obj).sort(([ ,v1], [ ,v2]) => v1 - v2);
return `Lowest value is ${lowestItems[1]}, with a key of ${lowestItems[0]}`;
}
var lowest = lowestValueAndKey(arr);
console.log(lowest);
Il y a plusieurs façons d'arriver à ce que vous voulez. Veuillez consulter les méthodes suivantes:
const obj = { lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49 }
const values = Object.values(obj)
const lowest = Math.min.apply(null, values)
// Using Object.keys(), Object.values() and findIndex()
const keys = Object.keys(obj)
const indexOfLowest = values.findIndex(function (x) { return x === lowest })
console.log(`The lowest value is ${lowest} from ${keys[indexOfLowest]}`)
// OR Using Object.keys() and filter()
const key = Object.keys(obj).filter(function (x) { return obj[x] === lowest })[0]
console.log(`The lowest value is ${lowest} from ${key}`)
// OR Using Object.entries() and sort()
const [[lowestKey, lowestVal]] = Object.entries(obj).sort(function ([,valA], [,valB]) { return valA - valB });
console.log(`The lowest value is ${lowestVal} from ${lowestKey}`)
Il existe de nombreuses façons d'aborder votre problème, mais voici une autre façon simple de le faire. Fondamentalement, c'est une manière de faire les choses par force brute, par laquelle vous parcourez chaque propriété pour vérifier la valeur.
const obj = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
const getSmallest = function (object) {
let smallestValue = Number.MAX_VALUE;
let selectedKey = '';
for (let key in object) {
if (object[key] < smallestValue) {
smallestValue = object[key];
selectedKey = key;
}
};
console.log(selectedKey, smallestValue)
return `The lowest value is ${smallestValue} from ${selectedKey}`;
};
getSmallest(obj);
Pour obtenir uniquement le nombre minimum, vous pouvez utiliser Math.min(...Object.entries(arr).map(o => o[1]))
:
const arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
const lowestValue = Math.min(...Object.entries(arr).map(o => o[1]));
console.log(lowestValue);
Et pour obtenir l'objet avec la valeur minimale, vous pouvez utiliser Object.entries(arr).reduce((a, [k, v]) => a[Object.keys(a)[0]] < v ? a : {[k]: v}, {})
:
const arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
const lowestObj = Object.entries(arr).reduce((a, [k, v]) => a[Object.keys(a)[0]] < v ? a : {[k]: v}, {});
console.log(lowestObj);
Ici, nous supposons d'abord que le min, la clé et la valeur sont respectivement la première propriété et la valeur. Ensuite, nous parcourons tous les éléments et comparons avec minValue pour trouver une valeur inférieure à celle de l'objet. Si c'est le cas, nous mettons à jour à la fois minValue et minKey. Quoi qu'il en soit, le type arr est un objet. ce n'est pas un tableau en javascript.
var arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49};
var minkey = Object.keys(arr)[0];
var minValue = arr[Object.keys(arr)[0]];
for (var key in arr) {
if (arr.hasOwnProperty(key)) {
if(arr[key] < minValue){
minValue = arr[key];
minKey = key;
}
}
}
Vous pouvez essayer ceci:
const arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, lst9: 2}
const minVal = Math.min(...Object.values(arr))
const fromKey = Object.keys(arr).find(key => arr[key] === minVal)
console.log(`The lowest value is ${minVal} from ${fromKey}`)
Vous pouvez utiliser Object.entries
et utilise Array.reduce
pour réduire la paire [valeur-clé] résultante en un objet dont l'entrée sera la plus faible:
const data = {lst1: 300, lst2: -381, lst3: 4, lst4: 4, lst5: 49, lst6: -49, lst7: 0, lst7: 78, lst7: -90};
const obj = Object.entries(data).reduce((acc, [key, value]) =>{
acc["lowest"] = acc["lowest"] ? Object.values(acc["lowest"])[0] < value ? acc["lowest"] : {[key] : value} : {[key] : value };
return acc;
}, {});
console.log(`Lowest value is found in ${JSON.stringify(obj.lowest)}`);
Vous pouvez essayer ceci:
obj = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, lst9: 2}; // This is an object, That;s ehy you getting infinite
var arr = Object.keys( obj ).map(function ( key ) { return obj[key]; });
alert(Math.min.apply( null, arr ));
Violon: https://jsfiddle.net/ozvubmdr/
Facile, mais pas optimal, car il parcourt le tableau deux fois: trouvez la plus petite valeur, puis trouvez la clé qui lui appartient.
arr = {lst1: 300, lst2: 381, lst3: 4, lst4: 4, lst5: 49, lst9: 2}
min = Math.min(...Object.values(arr));
minkey = Object.keys(arr).find(key => arr[key] = min);
console.log(`Lowest is ${min} at ${minkey}`);
Vous pouvez utiliser Object.entries
et Array.reduce
pour garder une trace de la paire minimale au fur et à mesure:
const findKeyForMin = obj => Object.entries(obj).reduce(([accKey, accVal], [curKey, curVal]) =>
/* Change `<` to `<=` to find the last minimum instead of the first minimum. */
curVal < accVal ? [curKey, curVal] : [accKey, accVal]
)[0];