我在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在他们。