Javascript 下划线-定位基于值的节点

Javascript 下划线-定位基于值的节点,javascript,underscore.js,Javascript,Underscore.js,这是我第一次使用下划线…我有一个简单的json "categories" : [ { "tag" : "cat1", "active" : true, "order" : 10, "title" : { "en" : "Category 1", "pt" : "Categoria 1" }, "children" : [

这是我第一次使用下划线…我有一个简单的json

"categories" : [ 
    {
        "tag" : "cat1",
        "active" : true,
        "order" : 10,
        "title" : {
            "en" : "Category 1",
            "pt" : "Categoria 1"
        },
        "children" : [ 
            {
                "tag" : "cat11",
                "active" : true,
                "order" : 10,
                "title" : {
                    "en" : "Category 1.1",
                    "pt" : "Categoria 1.1"
                }
            }, 
            {
                "tag" : "cat12",
                "active" : true,
                "order" : 20,
                "title" : {
                    "en" : "Category 1.2",
                    "pt" : "Categoria 1.2"
                }
            }
        ]
    }, 
    {
        "tag" : "cat2",
        "active" : true,
        "order" : 10,
        "title" : {
            "en" : "Category 2",
            "pt" : "Categoria 2"
        },
        "children" : [ 
            {
                "tag" : "cat21",
                "active" : true,
                "order" : 10,
                "title" : {
                    "en" : "Category 2.1",
                    "pt" : "Categoria 2.1"
                }
            }, 
            {
                "tag" : "cat22",
                "active" : true,
                "order" : 20,
                "title" : {
                    "en" : "Category 2.2",
                    "pt" : "Categoria 2.2"
                }
            }
        ]
    }, 
    {
        "tag" : "cat3",
        "active" : true,
        "order" : 10,
        "title" : {
            "en" : "Category 3",
            "pt" : "Categoria 3"
        },
        "children" : [ 
            {
                "tag" : "cat31",
                "active" : true,
                "order" : 10,
                "title" : {
                    "en" : "Category 3.1",
                    "pt" : "Categoria 3.1"
                }
            }, 
            {
                "tag" : "cat32",
                "active" : true,
                "order" : 20,
                "title" : {
                    "en" : "Category 3.2",
                    "pt" : "Categoria 3.2"
                }
            }
        ]
    }, 
    {
        "tag" : "cat4",
        "active" : true,
        "order" : 10,
        "title" : {
            "en" : "Category 4",
            "pt" : "Categoria 4"
        },
        "children" : [ 
            {
                "tag" : "cat41",
                "active" : true,
                "order" : 10,
                "title" : {
                    "en" : "Category 4.1",
                    "pt" : "Categoria 4.1"
                }
            }, 
            {
                "tag" : "cat42",
                "active" : true,
                "order" : 20,
                "title" : {
                    "en" : "Category 4.2",
                    "pt" : "Categoria 4.2"
                }
            }
        ]
    }
]
你可以看到我在几个地方有标签键。我需要根据标记的条件获取整个树。我使用了,find,filter,where和findWhere,一直都得到了相同的结果:

 var find = _.find($rootScope.webshop.categories, {tag: 'cat1'});
这管用

但是如果我尝试

 var find = _.find($rootScope.webshop.categories, {tag: 'cat11'}); 
无结果:(即使使用u.where或._filter或._findWhere.-结果始终相同。 有人能帮一个下划线初学者做一些简单的事情吗


ty!

\如果查找不重复,则必须构建自己的解决方案。类似以下内容:

_.findIn = function() {
  var args = Array.prototype.slice.call(arguments, 0);
  var childrenProp = args[0];
  var result = _.find.apply(_, args.slice(1));
  if (result !== void(8)) return result;
  var arr = args[1];
  for (var i = 0, l = arr.length; i < l; i++) {
    args[1] = arr[i][childrenProp];
    var result = _.findIn.apply(_, args);
    if (result !== void(8)) return result;
  }
  return void(8);
}

_.findIn('children', categories, {tag: 'cat11'})
\uuu.findIn=function(){
var args=Array.prototype.slice.call(参数,0);
var childrenProp=args[0];
var result=\ u0.find.apply(\ u0,args.slice(1));
if(result!==void(8))返回结果;
var arr=args[1];
对于(变量i=0,l=arr.length;i
categories=[
{
“标签”:“cat1”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“第1类”,
“pt”:“类别1”
},
“儿童”:[
{
“标签”:“cat11”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“1.1类”,
“pt”:“类别1.1”
}
}, 
{
“标签”:“cat12”,
“主动”:正确,
“命令”:20,
“标题”:{
“en”:“1.2类”,
“pt”:“类别1.2”
}
}
]
}, 
{
“标签”:“cat2”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“第2类”,
“pt”:“类别2”
},
“儿童”:[
{
“标签”:“cat21”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“2.1类”,
“pt”:“类别2.1”
}
}, 
{
“标签”:“cat22”,
“主动”:正确,
“命令”:20,
“标题”:{
“en”:“2.2类”,
“pt”:“类别2.2”
}
}
]
}, 
{
“标签”:“cat3”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“第3类”,
“pt”:“类别3”
},
“儿童”:[
{
“标签”:“cat31”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“3.1类”,
“pt”:“类别3.1”
}
}, 
{
“标签”:“cat32”,
“主动”:正确,
“命令”:20,
“标题”:{
“en”:“3.2类”,
“pt”:“类别3.2”
}
}
]
}, 
{
“标签”:“cat4”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“第4类”,
“pt”:“类别4”
},
“儿童”:[
{
“标签”:“cat41”,
“主动”:正确,
“命令”:10,
“标题”:{
“en”:“4.1类”,
“pt”:“类别4.1”
}
}, 
{
“标签”:“cat42”,
“主动”:正确,
“命令”:20,
“标题”:{
“en”:“第4.2类”,
“pt”:“类别4.2”
}
}
]
}
]
_.findIn=函数(){
var args=Array.prototype.slice.call(参数,0);
var childrenProp=args[0];
var result=\ u0.find.apply(\ u0,args.slice(1));
if(result!==void(8))返回结果;
var arr=args[1];
对于(变量i=0,l=arr.length;i

天哪,老兄!我一直在期待一个缺少的参数,一种额外的库…难怪这是一个定制解决方案所必需的。而且你非常慷慨地为我提供了解决方案。tyvm!嘿…很抱歉再次打扰你。你的代码对第一类(cat11 ok,cat12 ok)的孩子效果很好,但对其他孩子来说……这是行不通的:(有线索吗?