javascript - 下划线/Lodash : Group object by substring of key

标签 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_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 和 Underscore.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 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 } },
    result = Object.entries(data).reduce((r, [k, v]) => {
        var key = k.replace(/_.*$/, '') ;
        (r[key] = r[key] || {})[k] = v;
        return r;
    }, {});

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 下划线/Lodash : Group object by substring of key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56112385/

相关文章:

javascript - $.expr [':' ] 在 javascript 中是什么意思

javascript - 如何将 jQuery 日期选择器转换为仅选择月份和年份?

node.js - 用下划线 map 做一些异步的事情

javascript - 无法过滤类似数组的对象

javascript - 对 mongoose 返回的结果使用 lodash 时输出不正确

javascript - 在我的代码中收到以下错误 "Invalid left-hand side in assignment"

javascript - 如何通过重构、生命周期 HOC 设置 defaultParams?

javascript - _.debounce 没有按预期工作

javascript - JS 比较两个对象数组,并排除匹配值的元素到新数组中

javascript - 如何检查一个 json 对象数组中的 id 是否存在于另一个嵌套的 json 对象数组中?