2014-09-01 95 views
0

我有在JavaScript枚舉類這樣的:值枚舉的到陣列

var Produce= { 
    Apple: 1, 
    Banana: 2, 
    Tomato: 3, 
    Orange: 4 
    } 

我可以創建這些項目中的一個陣列,其餘以蒙戈分貝查詢中使用具有下列:

var fruit = [Produce.Apple,Produce.Banana, Produce.Orange]; 

這工作得很好,並返回這樣的真正價值:

fruit[0] = 2(Apple), fruit[1] = 2(Banana), fruit[2] = 4(Orange) 

一切都很好這一點。但是,我還需要創建一個不是水果的項目數組。實際上,枚舉具有超過50個值,並且可以增長。這意味着我需要製作和排列不包含在代碼中的值。

我試過以下,沒有什麼作品。

的問題是,農產品陣列不會識別長度或計數

var excludedProduce = []; 

for(var i = 0; i < produce.length ; i++){ 
    if(fruit.indexOf(produce[0]) == -1) //add 
     excludedProduce .push(produce[0]); 

任何幫助將不勝感激!

+1

看起來你正在嘗試用JS編程,就像你在其他語言中使用的一樣......我不確定這是否是一種好方法,並且可能會咬你......爲什麼不創建一個數組像var products = [{name:'Banana',isFruit:true},{name:'Car',isFruit:false}]'? – Andre 2014-09-01 20:48:49

+1

LOL:我用其他語言編寫了更多...不幸的是,我沒有太多的話來說明如何完成它。問題在於可能會添加任何數量的「蔬菜」,我不想使用它們。在mongo查詢中,您不僅要說出想要查找的值($ in),還必須陳​​述您不需要的值($ nin)。 – 2014-09-01 20:49:57

+0

這個問題是否真的與MongoDB有關? (有一個標籤) – 2014-09-01 20:50:44

回答

1

這將做的工作:

var fruit = [Produce.Apple,Produce.Banana, Produce.Orange]; 
var excludedProduce = []; 
for (var p in Produce) { 
    if (Produce.hasOwnProperty(p)) { 
     if (fruit.indexOf(Produce[p]) === -1) { 
      excludedProduce.push(Produce[p]); 
     } 
    } 
} 

說明:使用它們

    • 遍歷產生的密鑰使用
    • 確保他們沒有原型屬性前檢查該值是否不在水果數組中
    • 如果不將值推入exc ludedProduce array

    關於你的代碼有幾個問題,主要是因爲你將對象當作一個數組來處理,並期望它像一個行爲。如果您想了解更多關於該語言的內容,或者使用像underscore這樣的框架將這些內容抽象出來並允許您輕鬆遍歷對象並對其執行其他輔助操作,那麼我建議您閱讀Javascript the Good Parts之類的書。

  • +1

    完美。謝謝 – 2014-09-01 21:08:59

    +0

    沒問題,高興幫忙:) – ShaneQful 2014-09-01 21:09:51