所以我是一个JS新手,我正试图弄清楚如何解决我的问题。我试图循环一个对象并返回最小的数字。
在我的var shortest = ;
中,如果我对一个数字进行硬编码说var shortest = 455;
,那么问题会返回正确的数字3.虽然我不确定要将其放在哪里以使其默认为空。我尝试了object[0]
,object[key]
和''
,但这些都没有正常工作
var myObj = {first: 45, second: 23, third: 3, fourth: 222, fifth: 2343};
var myFunc = function (object) {
var shortest = ;
for (var key in object) {
if (object[key] < shortest) {
shortest = object[key];
}
};
return shortest;
};
答案 0 :(得分:2)
将最短的初始值设置为Number.MAX_VALUE就是您需要的
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 可表示最大的正数。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number
答案 1 :(得分:1)
试试这个:
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;
};
答案 2 :(得分:1)
失败的原因在于:
var myFunc = function (object) {
var shortest = ;
for (var key in object) {
if (object[key] < shortest) {
由于 shortest 的值未定义,<
运算符会将其转换为NaN
进行测试,并根据The Abstract Relational Comparison Algorithm的规则,将任何内容同步到NaN
会返回undefined,这相当于false
。
修复方法是将最短初始化为某个值,例如正如qiu-deqing建议使用Number.MAX_VALUE,或者你可以使用类似的东西:
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;
}
以上将确保您只比较数字,而最短只是一个数字或未定义。应该有一个 hasOwnProperty 测试,以避免继承属性。
答案 3 :(得分:0)
看看这是否有帮助:
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