2013-12-23 20 views
1

所以我是一個JS新手,並試圖找出如何解決我的問題。我試圖循環一個對象並返回最低的數字。在一個對象上循環,並在javascript中返回最低數字

在我的如果我硬編碼一個數字,說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; 
}; 
+1

如何把一個真正的大數字? 「Infinity」怎麼樣?這個問題看起來很像你以前的問題。這些作業問題嗎? –

+0

他們是,只是問題即時創建試圖學習這個可愛的語言:)我可以硬編碼的數字,但這並不適用於現實世界,所以試圖瞭解什麼是正確的方式來做到這一點。 – jstone

+0

它爲什麼不在現實世界中工作? –

回答

2

設置最短的初始值數.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實際回答問題。更有幫助的是指出,當* x *未定義時,'x RobG

+0

感謝您的反饋。忘記處理undefined是bug的常見來源:) –

+0

謝謝這個幫助了很多。我讀了MDN文檔,'MIN_value'是什麼意思,因爲它說'Number.MIN_VALUEThe最小的正數可表示的數字 - 也就是說,最接近於零的正數(實際上不是零)「,我真的不明白這一點。我將它與我的代碼一起運行,並在控制檯中返回了「5e-324」。 – jstone

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; 
    }; 
+0

考慮到用例,假設有一個叫做'first'的鍵是不安全的。 – loganfsmyth

+0

你真的不想硬編碼一個屬性。要採取這種方法,您需要在循環的第一次迭代中初始化變量,無論是使用標誌還是通過檢查'undefined'的'shortest'。 –

+0

您不應該依賴於將* shortest *設置爲某個隨機值。如果'object.first === NaN'或'undefined'會怎麼樣?另外,請解釋答案,而不是簡單地發佈代碼。 – RobG

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 
1

失敗的原因是在這裏:

var myFunc = function (object) { 
    var shortest = ; 
    for (var key in object) { 
     if (object[key] < shortest) { 

由於最短值爲未定義,所述<操作導致它被轉換爲NaN用於測試,並根據The Abstract Relational Comparison Algorithm的規則,任何與NaN無關的內容都會返回undefined,相當於false這裏。

該修復方法是將最初的初始化爲某個值,例如,作爲秋德清建議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測試,以避免遺留屬性。

相關問題