2016-03-04 108 views
1

JavaScript对象我有一个格式的Javascript对象像下面操纵以下划线

"items": 
     { 
     "Groups":[ 
      { 
       "title":"group 1", 
       "SubGroups":[ 
        { 
        "title":"sub1", 
        "id" : "1", 
        "items":[ 
         { 
          "title":"Ajax request 1", 
         }, 
         { 
          "title":"Ajax request 2", 
         } 
        ] 
        }, 
        { 
        "title":"sub2", 
        "id" : "2", 
        "items":[ 
         { 
          "title":"Ajax request 3", 
         }, 
         { 
          "title":"Ajax request 4", 
         } 
        ] 
        } 
       ] 
      } 
     ] 

有N“组”,N“亚组”和n“项目”。

我想要做的第一件事就是根据id从特定组中获取所有项目。这是通过使用来实现:

_.each(items.Groups, function(o) { 
    result = _.where(o.SubGroups, { 
    'id': '1' 
    }); 
}); 

返回

"items":[{"title":"Ajax request 1",},{"title":"Ajax request 2",}] 

然后,我想要得到的数据的其余部分,不包括我刚才检索到的项目和父组。

我尝试这样做:

_.each(items.Groups, function(o) { 
     arr = _.without(o.SubGroups, _.findWhere(o.SubGroups, {id: '2'})); 
    }); 

但这仅返回我的项目是这样的:

{ 
"title":"sub2", 
"id" : "2", 
"items":[{"title":"Ajax request 3"},{"title":"Ajax request 4",}] 
} 

,而我需要的是这样的:

"items": 
      { 
      "Groups":[ 
       { 
        "title":"group 1", 
        "SubGroups":[ 
         { 
         "title":"sub2", 
         "id" : "2", 
         "items":[ 
          { 
           "title":"Ajax request 3", 
          }, 
          { 
           "title":"Ajax request 4", 
          } 
         ] 
         } 
        ] 
       } 
      ] 

回答

1

试试看这个:

_.each(items.Groups, function(o) { 
    arr = _.without(o, _.findWhere(o.SubGroups, {id: '2'})); 
}); 

o应该足够了=>您想获取群组而不是子群组。

1

下面是一个纯JS实现:

JSFiddle

var data = { 
 
    "Groups": [{ 
 
    "title": "group 1", 
 
    "SubGroups": [{ 
 
     "title": "sub1", 
 
     "id": "1", 
 
     "items": [{ 
 
     "title": "Ajax request 1", 
 
     }, { 
 
     "title": "Ajax request 2", 
 
     }] 
 
    }, { 
 
     "title": "sub2", 
 
     "id": "2", 
 
     "items": [{ 
 
     "title": "Ajax request 3", 
 
     }, { 
 
     "title": "Ajax request 4", 
 
     }] 
 
    }] 
 
    }] 
 
} 
 

 
var items = []; 
 
var group = []; 
 

 
data.Groups.forEach(function(o) { 
 
    var _tmp = JSON.parse(JSON.stringify(o)); 
 
    _tmp.SubGroups = []; 
 
    o.SubGroups.forEach(function(s) { 
 
    if (s.id == "1") { 
 
     items.push(s.items); 
 
    } else { 
 
     _tmp.SubGroups.push(s); 
 
     group.push(_tmp) 
 
    } 
 
    }); 
 
}); 
 

 
function printObj(label, obj) { 
 
    document.write(label + "<pre>" + JSON.stringify(obj, 0, 4) + "</pre>") 
 
} 
 

 
printObj("group", group); 
 
printObj("items", items);

0

使用下划线和使用你的逻辑来过滤所有子组:

//array to store subgroup with ID 1 
var results = []; 
var d = _.each(data.items.Groups, function(o) { 
    result = _.where(o.SubGroups, { 
    'id': '1' 
    }); 
    //add to results array 
    results.push(result); 
}); 
//make a clone of the earlier object so that you get the parent structure. 
var data1 = _.clone(data); 
//set the filtered results to the group 
data1.items.Groups = results; 
//your data as you want 
console.log(data1) 

工作代码here