如何在JavaScript/ES6中对字符串层级组合执行函数?
嘿,这个需求其实挺常见的,我来给你捋捋怎么用ES6实现——核心就是先把层级字符串拆成数组,生成所有需要的层级组合,再遍历执行你的函数就行。话不多说,直接上方案:
实现思路
- 第一步:把点分隔的字符串拆分成层级数组,同时过滤掉空的无效层级(比如处理类似
"one..two"这种有多余点的情况) - 第二步:基于层级数组生成所有从完整到最短的层级组合(比如
one.two.three.four→one.two.three→one.two→one) - 第三步:如果需要反向执行,就把组合数组反转,然后遍历每个组合拼接成字符串,执行指定函数
具体代码实现
我写了一个通用的工具函数,你可以直接拿来用,参数支持原始字符串、处理函数,还有可选的反向开关:
function processHierarchyString(hierarchyStr, handler, reverse = false) { // 拆分层级并过滤空值,处理多余点或者空输入的情况 const levels = hierarchyStr.split('.').filter(level => level.trim() !== ''); if (levels.length === 0) return; // 生成从完整到最短的所有层级组合 const combinations = []; for (let i = levels.length; i >= 1; i--) { combinations.push(levels.slice(0, i).join('.')); } // 根据是否反向决定遍历顺序 const targetList = reverse ? [...combinations].reverse() : combinations; // 遍历每个组合执行处理函数 targetList.forEach(combinedStr => { handler(combinedStr); }); }
使用示例
先定义一个测试用的处理函数(你可以换成自己的业务逻辑,比如接口请求、数据处理等):
// 示例:打印每个层级字符串 const myHandler = (str) => console.log(`正在处理:${str}`);
正向执行(完整层级 → 最短层级)
processHierarchyString("one.two.three.four", myHandler); // 输出结果: // 正在处理:one.two.three.four // 正在处理:one.two.three // 正在处理:one.two // 正在处理:one
反向执行(最短层级 → 完整层级)
只需要加上第三个参数true即可:
processHierarchyString("one.two.three.four", myHandler, true); // 输出结果: // 正在处理:one // 正在处理:one.two // 正在处理:one.two.three // 正在处理:one.two.three.four
边界情况处理
- 如果输入是单个层级(比如
"single-level"),不管正向还是反向,只会执行一次处理函数 - 如果输入是空字符串、全是点(比如
"....")或者只有空白字符,函数会直接返回,不会执行处理函数
内容的提问来源于stack exchange,提问作者brainstormtrooper
相关产品推荐
相关产品推荐

