Javascript 使用下划线-根和子项进行筛选

Javascript 使用下划线-根和子项进行筛选,javascript,underscore.js,Javascript,Underscore.js,对有经验的ppl来说,这可能是非常基本的。这是我第一次使用下划线。我有这个json { "especiais" : { "text" : { "pt" : "Especiais" }, "active" : true }, "conjuntos" : { "text" : { "pt" : "Conjuntos" }, "acti

对有经验的ppl来说,这可能是非常基本的。这是我第一次使用下划线。我有这个json

{
    "especiais" : {
        "text" : {
            "pt" : "Especiais"
        },
        "active" : true
    },
    "conjuntos" : {
        "text" : {
            "pt" : "Conjuntos"
        },
        "active" : true,
        "subItems" : {
            "saiaEcamiseta" : {
                "text" : {
                    "pt" : "Saia e Camiseta"
                },
                "active" : true
            },
            "sandalhas" : {
                "text" : {
                    "pt" : "Sandalhas"
                },
                "active" : true
            }
        }
    },
    "macacoes" : {
        "text" : {
            "pt" : "Macacões"
        },
        "active" : true
    },
    "roupasBasicas" : {
        "text" : {
            "pt" : "Roupas Básicas"
        },
        "active" : true,
        "subItems" : {
            "xortes" : {
                "text" : {
                    "pt" : "Xortes"
                },
                "active" : true
            },
            "camiseta" : {
                "text" : {
                    "pt" : "Camisetas"
                },
                "active" : true
            }
        }
    },
    "enxoval" : {
        "text" : {
            "pt" : "Enxoval"
        },
        "active" : true
    }
}

我只想列出iten和子项的活动根。因此,在上面的例子中,macacoes和他的孩子将不会被列入名单,Xortes(Ruupasbasicas的孩子)也不会被列入名单,如果适用,它包括可能的孙子女

我第一次尝试:

    result = _und.filter(data.productCategories, function (item) {
        return item && item.active.indexOf(true) != -1;
    });

但它不起作用:(有人能帮我吗?

由于缺乏声誉,我不能要求澄清,所以我会尽我最大的努力为你找到答案

var children = [];

//Get all of the subitems that are active so we can merge with the primary result set
_.each(data.pt, function(item){
  if(item.subItems){
    _.each(item.subItems, function(child){
      if(child.active) children.push(child);
    });
  }
}); 

//Gather all active items in the primary result set
var result = _.filter(data.pt, function(item){
  return item.active;
});

//Add each active subItem to our results
_.each(children, function(child){
  result.push(child);
});
以下是我的理解: --请看一下script.js,因为它将提供核心实现

据我所知,您希望在pt对象的上下文中收集所有“活动”项

如果是这样的话,我通过链接提供的过滤器将是好的,尽管您仍将在父项下保留项目

如果需要过滤这些数据,您可以简单地清空将这些数据附加到对象的字段(或者选择更聪明的方法)


\uuu.filter
函数似乎最适合于此,因为您可以过滤给定谓词的数据集。我在前面代码中提供的查询的第二部分中的函数根据原始数据集是否处于活动状态缩小了原始数据集的范围。

为什么不显示macacoes?因为我们需要假设这个项目中的active是假的。嘿,Matt!再次阅读…我的解释很糟糕,但你还是相信我的观点!好吧,它几乎100%正确。你的句子可以隐藏根上active=false的项目,但它也必须显示所有子项,当然:不能显示active=false的子项。换句话说,它是这是一个类别树,我需要在其中隐藏不活动的类别和子类别-以澄清.ty!!!我想我明白你现在在说什么了。如果你保证子项目不会无限期嵌套,那么更新的答案可能对你有用。我还更新了plunk。