我在javascript中有一个枚举类,如下所示:

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


我可以使用以下命令创建在mongo数据库查询中使用的这些项目的数组:

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]);


任何帮助将不胜感激!

最佳答案

这将完成工作:

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]);
        }
    }
}


说明:


使用以下命令循环浏览Produce中的键
使用它们之前,请确保它们不是原型属性
检查值是否不在水果数组中
如果不是,则将值推送到excludeProduce数组中


关于您的代码,存在任何几个问题,主要是由于您将对象视为一个数组,并期望它像一个对象一样工作。如果您想了解更多有关该语言的信息,或者建议使用诸如Javascript the Good Parts之类的框架来抽象其中的一些内容,并建议您轻松遍历对象并执行其他出色的助手操作,我建议您读一本书,例如underscore在他们。

10-07 19:09
查看更多