我有以下数据结构,我试图按其父级别对这些部分进行分组.
const arr = [
{
level: '1.1',
name: 'group title 1',
},
{
level: '1.1.1',
name: 'group section 1.1.1',
},
{
level: '1.1.2',
name: 'group section 1.1.2',
},
{
level: '1.1.3',
name: 'group section 1.1.3',
},
{
level: '1.2',
name: 'group title 2',
},
{
level: '1.2.1',
name: 'group section 1.1.1',
},
{
level: '1.3',
name: 'group title 3',
},
{
level: '1.3.1',
name: 'group section 1.1.1',
},
{
level: '1.3.2',
name: 'group section 1.1.2',
},
{
level: '1.4',
name: 'group title 4',
},
{
level: '1.4.1',
name: 'group section 1.4.1',
},
{
level: '1.4.2',
name: 'group section 1.4.2',
},
{
level: '1.4.3',
name: 'group section 1.4.3',
},
];
Run Code Online (Sandbox Code Playgroud)
我一直在尝试将结构更改为以下对象(对部分进行分组).该对象具有父级别的值作为属性和部分的数组.
const obj = {
'1.1': [
{
level: '1.1.1',
name: 'group section 1.1.1',
},
{
level: '1.1.2',
name: 'group section 1.1.2',
},
{
level: '1.1.3',
name: 'group section 1.1.3',
},
],
'1.2': [
{
level: '1.2',
name: 'group title 2',
},
{
level: '1.2.1',
name: 'group section 1.1.1',
},
],
'1.3': [
{
level: '1.3',
name: 'group title 3',
},
{
level: '1.3.1',
name: 'group section 1.1.1',
},
{
level: '1.3.2',
name: 'group section 1.1.2',
},
],
'1.4': [
{
level: '1.4.1',
name: 'group section 1.4.1',
},
{
level: '1.4.2',
name: 'group section 1.4.2',
},
{
level: '1.4.3',
name: 'group section 1.4.3',
},
],
};
Run Code Online (Sandbox Code Playgroud)
我的尝试没有成功.我将不胜感激如何将结构更改为上述内容.
Array.prototype.reduce()可用于构造objects从arrays.
String.prototype.match()可用于检测模式strings.
/\d+\.\d+/匹配第一个出现的一个或多个,numbers后跟一个full stop后跟一个或多个numbers
// Input.
const input = [{level: '1.1',name: 'group title 1',},{level: '1.1.1',name: 'group section 1.1.1',},{level: '1.1.2',name: 'group section 1.1.2',},{level: '1.1.3',name: 'group section 1.1.3',},{level: '1.2',name: 'group title 2',},{level: '1.2.1',name: 'group section 1.1.1',},{level: '1.3',name: 'group title 3',},{level: '1.3.1',name: 'group section 1.1.1',},{level: '1.3.2',name: 'group section 1.1.2',},{level: '1.4',name: 'group title 4',},{level: '1.4.1',name: 'group section 1.4.1',},{level: '1.4.2',name: 'group section 1.4.2',},{level: '1.4.3',name: 'group section 1.4.3',},]
// Group.
const group = (array) => array.reduce((o, x) => {
const key = x.level.match(/\d+\.\d+/)
if (o[key]) o[key].push(x)
else o[key] = [x]
return o
}, {})
// Output.
const output = group(input)
// Proof.
console.log(output)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |