2014-09-01 71 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