如何使用jQuery将带分隔符的层级字符串转换为多维嵌套对象
实现思路
你现在的写法用map只会返回数组,要生成嵌套对象需要逐层遍历路径片段,每一层判断对应键是否已经存在,不存在就初始化空对象,直到最后一级路径的时候赋值你需要的value即可。
完整实现代码
// 初始化最终的参数对象 var params = {}; // 你可以替换成自己的遍历逻辑,比如$('li').each(function() { 取对应路径 }) var pathList = [ 'grand-parent/parent/child', 'grand-parent/parent/child2', 'grand-parent2/parent2/child3' ]; pathList.forEach(function(path) { var parentIds = path.split("/"); // 临时指针用来逐层操作对象,避免直接修改根对象 var currentLevel = params; // 遍历所有路径片段 for(var i = 0; i < parentIds.length; i++) { var key = parentIds[i]; // 最后一级路径赋值自定义value,可替换为你实际的取值逻辑 if(i === parentIds.length - 1) { currentLevel[key] = '你的自定义value'; } else { // 非最后一级如果当前键不存在就初始化为空对象 if(!currentLevel[key]) { currentLevel[key] = {}; } // 指针移动到下一层 currentLevel = currentLevel[key]; } } }); console.log(params); // 输出就是你需要的嵌套对象结构
现有代码问题说明
你之前的写法直接把map返回的数组赋值给了params,自然只能拿到数组结构。替换为上述逐层遍历赋值逻辑即可实现需求,不需要依赖jQuery特殊方法,纯JS就能实现,可以直接嵌入你现有循环逻辑中使用。
内容的提问来源于stack exchange,提问作者J.BizMai
相关产品推荐
相关产品推荐

