Cho mảng chuỗi dạng x.y.x.y... (ví dụ: country.UK.level.1). Chuyển đổi thành đối tượng lồng nhau nhóm theo key.
Ví dụ đầu vào:
const arr = ["country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3"];
Kết quả mong đợi:
{
"country": {
"UK": { "level": ["1", "2", "3"] },
"US": { "level": ["1"] }
}
}
Mã thực hiện
const arr = ["country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3"];
const stringToObject = arr => {
const obj = {};
arr.forEach(str => {
let curr = obj;
let splitted = str.split('.');
let last = splitted.pop();
let beforeLast = splitted.pop();
splitted.forEach(sub => {
if (!curr.hasOwnProperty(sub)) curr[sub] = {};
curr = curr[sub];
});
if (!curr[beforeLast]) curr[beforeLast] = [];
curr[beforeLast].push(last);
});
return obj;
};
console.log(JSON.stringify(stringToObject(arr), undefined, 4));
Kết quả
{
"country": {
"UK": { "level": ["1", "2", "3"] },
"US": { "level": ["1"] }
}
}