我正在尝试_.groupBy
在我的收藏夹的一个对象内使用密钥。
示例: 给定以下集合:
[
{ _id: 1234, data: { label: '1' } },
{ _id: 2345, data: { label: '1' } },
{ _id: 3456, data: { label: '1' } },
{ _id: 4567, data: { label: '2' } }
]
通过像_id
这样的第一级密钥分组,可以得到以下结果:{1234: Array(1), 2345: Array(1), 3456: Array(1), 4567: Array(1)}
,这是正确的。
是否可以按不在label
之类的第一级的键进行分组?
我正在执行以下操作:_.groupBy(A, 'data.label')
,但是结果是{undefined: Array(4)}
,我想拥有{1: Array(3), 2: Array(1)}
。
PS:我无法规范我的数据,其结构保持不变。
谢谢。
答案 0 :(得分:1)
您可以尝试不加下划线的类似内容。您可以为路径定义自己的getter,然后按值分组。希望这会有所帮助。
const data = [
{ _id: 1234, data: { label: '1' } },
{ _id: 2345, data: { label: '1' } },
{ _id: 3456, data: { label: '1' } },
{ _id: 4567, data: { label: '2' } }
];
const get = (o, path) => path.split('.').reduce((acc, key) => acc[key], o);
const groupBy = (data, path) =>
data.reduce((acc, val) => {
const groupKey = get(val, path);
acc[groupKey] = (acc[groupKey] || []).concat(val);
return acc;
}, {});
console.log(groupBy(data, 'data.label'));
答案 1 :(得分:0)
更短/最佳答案:_.groupBy(data, item => item.data.label);