JavaScript如何实现类似字符串split的按指定值分割数组功能
按type属性分割数组实现方案
完全可以实现该分割逻辑,以下是可直接运行的实现方式:
JavaScript 实现代码
function splitByDivider(sourceArr) { const splitResult = []; let tempChunk = []; for (const item of sourceArr) { if (item.type === 'divider') { if (tempChunk.length) { splitResult.push(tempChunk); tempChunk = []; } continue; } tempChunk.push(item); } // 处理最后一段未推入结果的内容 if (tempChunk.length) splitResult.push(tempChunk); return splitResult; } // 输入示例 const input = [ { "type": "type-a", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "type-c", "name": "Foo" }, { "type": "divider", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "divider", "name": "Foo" }, { "type": "type-c", "name": "Foo" } ]; // 执行函数即可得到期望输出 const output = splitByDivider(input);
实现逻辑说明
- 遍历过程中维护一个临时数组收集当前分段的元素
- 遇到
type值为divider的元素时,若当前临时数组非空就存入最终结果,随后清空临时数组开始下一段收集,分隔符本身不会被保留到任何子数组中 - 遍历结束后将最后一段收集到的非空内容存入结果,避免遗漏末尾没有跟随分隔符的分段
边界场景适配
- 数组开头存在分隔符时,不会生成开头的空数组
- 数组末尾存在分隔符时,不会生成末尾的空数组
- 连续出现多个分隔符时,不会在相邻分隔符之间生成空数组
内容的提问来源于stack exchange,提问作者dpedrovich
相关产品推荐
相关产品推荐

