简体   繁体   English

Lodash groupby 多个条件

[英]Lodash groupby multiple conditions

I have this Input我有这个输入

 var data = [ { 'group': { 'id': 1, 'name': 'admin' }, 'role': 'name1', 'screen': { 'info': 'white', 'name': 'Cat' } }, { 'group': { 'id': 1, 'name': 'admin' }, 'role': 'name2', 'screen': { 'info': 'Grey', 'name': 'Dog' } }, { 'group': { 'id': 2, 'name': 'client' }, 'role': 'name3', 'screen': { 'info': 'Grey', 'name': 'goldfish' } } ]; //obj=>JSON.stringify({age: obj.age, address: obj.details[0].address}) //obj=>JSON.stringify({group: obj.name, displayname: obj}) var result=_.chain(data).groupBy("group.name").map(function(v, i) { return { group: i, role: _.get(_.find(v, 'role'), 'role'), screen: _.map( v, 'screen'), } }).value(); document.body.innerHTML = '<pre>' + JSON.stringify(result, null, ' ') + '</pre>';
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

And here is my output I want: [ { "group": "admin", "screen": [ { "role": "name1", "ui": { "info": "white", "name": "Cat" } }, { "role": "name2", "ui": { "info": "Grey", "name": "Dog" } } ] }, { "group": "client", "screen": [ { "role": "name3", "ui": { "info": "Grey", "name": "goldfish" } } ] } ] Any help from all you always helpful with me.这是我想要的输出: [ { "group": "admin", "screen": [ { "role": "name1", "ui": { "info": "white", "name": "Cat" } }, { "role": "name2", "ui": { "info": "Grey", "name": "Dog" } } ] }, { "group": "client", "screen": [ { "role": "name3", "ui": { "info": "Grey", "name": "goldfish" } } ] } ]你总是对我有帮助。 Thank you.谢谢你。 :( :(

You'll need to use the map's callback function to manually create the result screen object:您需要使用地图的回调函数来手动创建结果屏幕对象:

 var data = [{"group":{"id":1,"name":"admin"},"role":"name1","screen":{"info":"white","name":"Cat"}},{"group":{"id":1,"name":"admin"},"role":"name2","screen":{"info":"Grey","name":"Dog"}},{"group":{"id":2,"name":"client"},"role":"name3","screen":{"info":"Grey","name":"goldfish"}}]; var result = _(data) .groupBy("group.name") .map(function(v, group) { return { group, screen: _.map(v, function(o) { return { role: o.role, ui: o.screen }; }), } }) .value(); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>

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

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