看了前端面试经历分享,说面了十几个前端写个扁平化数据格式化都写不出来,自己写了写试试娱乐下
以下代码放到js中可以直接运行,有需要可以自己完善下
function formt() {
let old_data = {
"userInfo.name": "张三",
"userInfo.dtl.age": 12,
"userInfo.dtl.addr": "北京",
"userInfo.message[0].date": "2021-11-23 12:33:44",
"userInfo.message[0].info": "话费",
"userInfo.message[1].date": "2021-09-23 12:33:44",
"userInfo.message[1].info": "买衣服",
"userInfo.message[2].date": "2021-03-23 12:33:44",
"userInfo.message[2].info": "买水",
"userInfo.message[3].date": "2021-06-13 12:33:44",
"userInfo.message[3].info": "买矿泉水",
};
let new_data = {};
for (let key in old_data) {
form(key, old_data[key], new_data);
}
console.log(JSON.stringify(new_data))
}
function form(keys, value, container) {
console.log(keys)
// 判断是否为最后属性
if (keys.indexOf(".") == -1) {
container[keys] = value;
return;
}
// 当前 key
let key = keys.substring(0, keys.indexOf("."));
// 剩余的key
let surplusKeys = keys.substring(keys.indexOf(".") + 1);
// 新的key,当为集合中的元素时,key存在下标,需要截取,
let newKey = key;
// 是不是集合
let isArray;
// 当前元素的下标,也就是在集合中的位置
let currentArrayIndes;
// 判断是否为集合,
if (isArray = (key.indexOf("[") != -1 && key.indexOf("]") != -1)) {
// 截取实际的key,跟下标
newKey = key.substring(0, key.lastIndexOf("["));
currentArrayIndes = parseInt(key.substring(key.indexOf("[") + 1, key.indexOf("]")));
}
// 声明并初始化一个容器,如果存在初始化时多余的
let currentContainer = {};
if (!container[newKey]) {
// 如果传入容器中不存在此key对应的容器
// 如果是集合则初始化一个集合第一个元素为声明的容器,如果不是集合则放入传入的容器中
// 暂时认为 array是有序的
container[newKey] = isArray ? [currentContainer] : currentContainer;
form(surplusKeys, value, currentContainer);
} else {
if (isArray) {
// 如果是集合,并且集合中有此下标对应的容器,则取该容器作为当前容器,递归传入
// 反之,如果集合中不存在则放入集合
if (container[newKey][currentArrayIndes]) {
currentContainer = container[newKey][currentArrayIndes]
} else {
container[newKey][currentArrayIndes] = currentContainer;
}
}
else {
currentContainer = container[newKey];
}
form(surplusKeys, value, currentContainer);
}
}
formt();
{“userInfo”:{“name”:“张三”,“dtl”:{“age”:12,“addr”:“北京”},“message”:[{“date”:“2021-11-23 12:33:44”,“info”:“话费”},{“date”:“2021-09-23 12:33:44”,“info”:"
买衣服"},{“date”:“2021-03-23 12:33:44”,“info”:“买水”},{“date”:“2021-06-13 12:33:44”,“info”:“买矿泉水”}]}}

本文分享了一段用于将扁平化的数据格式转换成嵌套对象格式的JavaScript代码实现。通过对键值对进行解析,能够正确处理数组及对象结构,最终输出结构化的JSON数据。
645

被折叠的 条评论
为什么被折叠?



