Javascript 下划线/Lodash:按键的子字符串对对象分组
我试图根据对象键的子串将对象分组到一个更有组织的结构中 下面是我正在传递的对象的示例:Javascript 下划线/Lodash:按键的子字符串对对象分组,javascript,underscore.js,lodash,Javascript,Underscore.js,Lodash,我试图根据对象键的子串将对象分组到一个更有组织的结构中 下面是我正在传递的对象的示例: var data = { "summ_example_1": { "value": 40464.284237 }, "summ_example_number_2": { "value": 39260.605837 }, "in_process_example_1": { "count": 10, "value": 10 }, "in_process_
var data = {
"summ_example_1": {
"value": 40464.284237
},
"summ_example_number_2": {
"value": 39260.605837
},
"in_process_example_1": {
"count": 10,
"value": 10
},
"in_process_example_2": {
"count": 12,
"value": 12.5
},
"in_process_example_3": {
"count": 0,
"value": 0
},
"awaiting_example_1": {
"count": 17,
},
"awaiting_example_2": {
"count": 51,
}
}
我想要的输出是:
{ summ:
["summ_example_1": {"value": 40464.284237},
"summ_example_number_2": {"value": 39260.605837}],
in:
["in_process_example_1": {"count": 10, "value": 10},
"in_process_example_2": {"count": 12, "value": 12.5},
"in_process_example_3": {"count": 0, "value": 0}],
awaiting:
["awaiting_example_1": {"count": 17},
"awaiting_example_2": {"count": 51"}]}
我尝试在Lodash和underline.js中使用groupBy对对象进行分组,但没有成功
在下划线中,我可以使用以下代码注意,这在Lodash中不起作用,因为我似乎无法获取对象键的值:
var grouped = _.groupBy(data, function(val, key){
return key.substr(0, key.indexOf('_'));
});
将生成以下输出:
{ summ:
[{"value": 40464.284237},
{"value": 39260.605837}],
in:
[{"count": 10, "value": 10},
{"count": 12, "value": 12.5},
{"count": 0, "value": 0}],
awaiting:
[{"count": 17},
{"count": 51"}]}
但是,我希望将对象键保留在输出中,正如您所看到的,它正在删除它们
我正在做的事情可能吗
道歉,如果这没有意义或已经被问到,但我一直在寻找一个解决方案的时间超过了我想,并开始用尽的想法
感谢您花时间阅读此文章,请随时提问 您可以获取对象的条目,并根据该键构建新的键和组 var数据={summ_示例_1:{value:40464.284237},summ_示例_2:{value:39260.605837},进程内示例_1:{count:10,value:10},进程内示例_2:{count:12,value:12.5},进程内示例_3:{count 0,value:0},等待示例_1:{count count 17},等待示例_2:{51}, 结果=Object.entriesdata.reducer,[k,v]=>{ var key=k.replace/.*$/; r[key]=r[key]|{}[k]=v; 返回r; }, {}; console.logresult; 作为控制台包装器{max height:100%!important;top:0;}Lodash的Uby.groupBy仅使用值调用迭代者,此外groupBy的结果是数组的对象,而不是您需要的对象的对象 解决方案1-洛达斯: 您可以使用u0.flow创建一个函数,该函数映射每个对象以包括组键summ,例如,并将它们合并在一起: 常数{flow,map,partialOK:pr,spread,merge}=_ 常数fn=流量 prmap,v,k=>{[k.split''[0]]:{[k]:v},//格式化每个对象,使其具有组键-summ,例如 spreadmerge//将所有对象合并在一起 const data={summ_example_1:{value:40464.284237},summ_example_2:{value:39260.605837},in_process_example_1:{count:10,value:10},in_process_example_2:{count:12,value:12.5},in_example_3:{count 0,value:0},等待_example_1:{count 17},等待_example_2:{count 51}; const result=fndata; console.logresult; .作为控制台包装{最大高度:100%!重要;顶部:0;}
顺便说一句,您的组必须是对象,而不是数组。您预期的输出无效。对此表示歉意,我在写问题时一定忽略了我输出的结构。太好了!多亏了这一点,让人头疼了一段时间,数据都按其应有的结构构建。再次感谢!