繁体   English   中英

使用_()。any()有什么问题?

[英]What am I doing wrong with my use of _().any()?

我试图重构以下代码以使用.filter()和.any()。 我要去哪里错了?

目标是退还所有不含坚果或蘑菇的比萨饼。 在这两种情况下,productICanEat.length应该=== 1。

原始代码:

products = [
   { name: "Sonoma", ingredients: ["artichoke", "sundried tomatoes", "mushrooms"], containsNuts: false },
   { name: "Pizza Primavera", ingredients: ["roma", "sundried tomatoes", "goats cheese", "rosemary"], containsNuts: false },
   { name: "South Of The Border", ingredients: ["black beans", "jalapenos", "mushrooms"], containsNuts: false },
   { name: "Blue Moon", ingredients: ["blue cheese", "garlic", "walnuts"], containsNuts: true },
   { name: "Taste Of Athens", ingredients: ["spinach", "kalamata olives", "sesame seeds"], containsNuts: true }
];

var i,j,hasMushrooms, productsICanEat = [];

for (i = 0; i < products.length; i+=1) {
    if (products[i].containsNuts === false) {
        hasMushrooms = false;
        for (j = 0; j < products[i].ingredients.length; j+=1) {
           if (products[i].ingredients[j] === "mushrooms") {
              hasMushrooms = true;
           }
        }
        if (!hasMushrooms) productsICanEat.push(products[i]);
    }
}

重构代码:

var productsICanEat = [];

  /* solve using filter() & all() / any() */
  productsICanEat = _(products).chain()
              .filter(function(product) { 
                if(product.containsNuts === false) 
                  return product; 
                })
              .any(function(product) {

                if(product.ingredients.indexOf('mushrooms') === -1)
                  return true;
                else
                  return false;

              }).value();

您可以只使用filter来执行此操作。 filter器迭代器使用的函数应根据是否应将其包含在productsICanEat来返回一个布尔值:

productsICanEat = _(products).chain().filter(function(product) { 
    return !product.containsNuts && (product.ingredients.indexOf('mushrooms') === -1); 
});

您已经使它复杂化了。

var productsICanEat = _(products).filter(function(product) {
    return !product.containsNuts && product.ingredients.indexOf("mushrooms") === -1;
});

http://jsfiddle.net/Dogbert/Ap9LR/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM