Loop Over An Object And Return Lowest Number In Javascript
Solution 1:
set initial value of shortest to Number.MAX_VALUE is all you need
var myObj = {first: 45, second: 23, third: 3, fourth: 222, fifth: 2343};
var myFunc = function (object) {
var shortest = Number.MAX_VALUE;
for (var key in object) {
if (object[key] < shortest) {
shortest = object[key];
}
};
return shortest;
};
Number.MAX_VALUE The largest positive representable number.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
Solution 2:
Try this:
var myObj = {first: 45, second: 23, third: 3, fourth: 222, fifth: 2343};
var myFunc = function (object) {
var shortest = object.first;
for (var key in object) {
if (object[key] < shortest) {
shortest = object[key];
}
};
return shortest;
};
Solution 3:
The reason it fails is in here:
var myFunc = function (object) {
var shortest = ;
for (var key in object) {
if (object[key] < shortest) {
Since the value of shortest is undefined, the <
operator causes it to be converted to NaN
for the test, and according to the rules for The Abstract Relational Comparison Algorithm, comaring anything to NaN
returns undefined, which is equivalent to false
here.
The fix is to initialise shortest to some value, e.g. as qiu-deqing suggested Number.MAX_VALUE, or you can use something like:
function getShortest(object) {
var shortest, value;
for (var key in object) {
value = object[key];
if (typeof value == 'number' && !isNaN(value)) {
if (typeof shortest != 'number') {
shortest = value;
} else {
if (value < shortest) {
shortest = value;
}
}
}
}
return shortest;
}
The above will ensure that you only compare numbers and that shortest will only be a number or undefined. There should probably be a hasOwnProperty test too to avoid inherited properties.
Solution 4:
See if this helps:
var lowest = function(ns) {
return Math.min.apply(0, ns);
};
var values = function(obj) {
var result = [];
for (var i in obj) {
result.push(obj[i]);
}
return result;
};
var result = lowest(values(myObj));
console.log(result); //=> 3
Post a Comment for "Loop Over An Object And Return Lowest Number In Javascript"