递归字符串解析为对象-JavaScript
我们需要编写一个JavaScript函数,该函数接受一个字符串数组并返回一个与字符串对应的对象。
例如-
如果数组是-
const arr = ["country.UK.level.1",
"country.UK.level.2",
"country.US.level.1",
"country.UK.level.3"
];
那么输出应该是-
const output = {"country": [
{"UK" : {"level" : ["1", "2", "3"]}},
{"US" : {"level" : ["1","2"]}}
]
}
条件
存储在str数组中的字符串将不会排序,并且代码应对此健壮。
字符串将遵循xyxy ..模式,其中x对于该数组是唯一的,而y可以更改。在我的示例中,国家和级别将始终与表示x pos的相同。
这需要递归方法,因为存储在str数组中的字符串可以是任意长度。字符串越长,嵌套越深。
示例
以下是代码-
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));
输出结果
这将在控制台上产生以下输出-
{"country": {
"UK": {
"level": [
"1",
"2",
"3"
]
},
"US": {
"level": [
"1"
]
}
}
}
以上是 递归字符串解析为对象-JavaScript 的全部内容, 来源链接: utcz.com/z/343660.html