The numbering follows these rules:
-
If an item is at level 1, its number is simply its position at level 1.
-
If an item is at a higher level than the previous item, it becomes a child of the previous item, and its number is an extension of the previous item’s number with an additional segment.
-
If an item is at the same level as the previous item, it is considered a sibling of the previous item. Its number is formed by incrementing the last segment of the previous item’s number.
-
If an item is at a lower level than the previous item, it becomes a child of the nearest ancestor at the same level. Its number is formed by resetting the numbering at its level and incrementing it.
These rules apply as you traverse through the list of items. The numbering system allows for a clear representation of the hierarchical relationships between items in the structure.
if input json is
const jsonData1 = [
{ "name": 'Fruit', "level": 1 },
{ "name": 'Apple', "level": 2 },
{ "name": 'Banana', "level": 3 },
{ "name": 'Fruit loops', "level": 2 },
{ "name": 'Vegetables', "level": 3 },
{ "name": 'Green', "level": 4 },
{ "name": 'Green', "level": 4 },
{ "name": 'Green', "level": 5 },
{ "name": 'Orange', "level": 1 },
{ "name": 'Broccoli', "level": 1 },
{ "name": 'Brussels sprouts', "level": 2 },
{ "name": 'Pumpkins', "level": 2 },
{ "name": 'Carrots', "level": 3 }
];
output is to generate globally followed hierarchy using levels
[
{ name: 'Fruit', level: 1, number: '1' },
{ name: 'Apple', level: 2, number: '1.1' },
{ name: 'Banana', level: 3, number: '1.1.1' },
{ name: 'Fruit loops', level: 2, number: '1.2' },
{ name: 'Vegetables', level: 3, number: '1.2.1' },
{ name: 'Green', level: 4, number: '1.2.1.1' },
{ name: 'Green', level: 4, number: '1.2.1.2' },
{ name: 'Green', level: 5, number: '1.2.1.2.1' },
{ name: 'Orange', level: 1, number: '2' },
{ name: 'Broccoli', level: 1, number: '3' },
{ name: 'Brussels sprouts', level: 2, number: '3.1' },
{ name: 'Pumpkins', level: 2, number: '3.2' },
{ name: 'Carrots', level: 3, number: '3.2.1' }
]
i am getting output
"[{'name':'Fruit','level':1,'number':'1'},{'name':'Apple','level':2,'number':'1.1'},{'name':'Banana','level':3,'number':'1.1.1'},{'name':'Fruit loops','level':2,'number':'1.2'},{'name':'Vegetables','level':3,'number':'1.2.2'},{'name':'Green','level':4,'number':'1.2.2.1'},{'name':'Green','level':4,'number':'1.2.2.2'},{'name':'Green','level':5,'number':'1.2.2.2.1'},{'name':'Orange','level':1,'number':'2'},{'name':'Broccoli','level':1,'number':'3'},{'name':'Brussels sprouts','level':2,'number':'3.3'},{'name':'Pumpkins','level':2,'number':'3.4'},{'name':'Carrots','level':3,'number':'3.4.3'}]"
can someone explain where my logic fails and explain the same.
thanks for your response.
my code is
function generateHierarchicalNumbering(data) {
const numbering = [];
const levelCount = {};
for (const item of data) {
const currentLevel = item.level;
if (!(currentLevel in levelCount)) {
levelCount[currentLevel] = 1;
} else {
levelCount[currentLevel]++;
}
let currentNumber = '';
for (let i = 1; i <= currentLevel; i++) {
if (i > 1) currentNumber += '.';
currentNumber += levelCount[i] || '1';
}
item.number = currentNumber;
numbering.push({ ...item });
}
return numbering;
}
// Test cases
const jsonData1 = [
{ "name": 'Fruit', "level": 1 },
{ "name": 'Apple', "level": 2 },
{ "name": 'Banana', "level": 3 },
{ "name": 'Fruit loops', "level": 2 },
{ "name": 'Vegetables', "level": 3 },
{ "name": 'Green', "level": 4 },
{ "name": 'Green', "level": 4 },
{ "name": 'Green', "level": 5 },
{ "name": 'Orange', "level": 1 },
{ "name": 'Broccoli', "level": 1 },
{ "name": 'Brussels sprouts', "level": 2 },
{ "name": 'Pumpkins', "level": 2 },
{ "name": 'Carrots', "level": 3 }
];
console.log(JSON.stringify(generateHierarchicalNumbering(jsonData1)));





