【问题标题】:Values of Enum to Array枚举值到数组
【发布时间】:2014-09-01 20:41:34
【问题描述】:

我在 javascript 中有一个这样的枚举类:

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

我可以创建一个包含这些项目的数组,我在 mongo db 查询中使用以下内容:

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

任何帮助将不胜感激!

【问题讨论】:

  • 看起来你正在尝试用 JS 编程,就像你用其他语言一样......我不确定这是否是一个好方法,并且可能会咬你......为什么不您是否创建了一系列产品,例如var products = [{ name: 'Banana', isFruit: true }, { name: 'Car', isFruit: false}]
  • LOL:我已经用其他语言编写了更多的程序......不幸的是,我对如何完成这一点没有太多发言权。问题是我不想使用任何数量的“蔬菜”。在 mongo 查询中,您不仅要说出要查找的值 ($in),还必须说明不想要的值 ($nin)。
  • 这个问题真的和MongoDB有关吗? (有一个标签)
  • 是的,在 MongoDB 上。如果您知道在 $in 语句中只返回值的方法。如果其中任何一个与 $in 参数匹配,则具有嵌套集合的集合将返回所有嵌套值。限制的唯一方法是说 $in (parameters) AND $nin (parameters)。如果有其他方法,请指教。

标签: javascript arrays enums


【解决方案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]);
        }
    }
}

解释:

  • 使用 in 循环遍历 Produce 中的键
  • 在使用它们之前确保它们不是原型属性
  • 检查值是否不在 fruits 数组中
  • 如果不是将值推送到 excludeProduce 数组中

关于您的代码,有几个问题主要是由于您将对象视为一个数组并期望它像一个数组一样工作。如果您想了解有关该语言的更多信息或使用像 underscore 这样的框架来抽象其中的一些内容并允许您轻松循环对象并执行其他很酷的辅助操作,我建议您阅读像 Javascript the Good Parts 这样的书在他们。

【讨论】:

  • 没问题,乐于助人:)
猜你喜欢
  • 2020-09-24
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2015-02-12
相关资源
最近更新 更多