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;}
顺便说一句,您的组必须是对象,而不是数组。您预期的输出无效。对此表示歉意,我在写问题时一定忽略了我输出的结构。太好了!多亏了这一点,让人头疼了一段时间,数据都按其应有的结构构建。再次感谢!