Javascript 下划线-定位基于值的节点
这是我第一次使用下划线…我有一个简单的jsonJavascript 下划线-定位基于值的节点,javascript,underscore.js,Javascript,Underscore.js,这是我第一次使用下划线…我有一个简单的json "categories" : [ { "tag" : "cat1", "active" : true, "order" : 10, "title" : { "en" : "Category 1", "pt" : "Categoria 1" }, "children" : [
"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)的孩子效果很好,但对其他孩子来说……这是行不通的:(有线索吗?