如何将数组按空字符串分割为多个子数组?
数组分割解决方案
给定原数组:
[ '1000', '2000', '3000', '', '4000', '', '5000', '6000', '', '7000', '8000', '9000', '', '10000' ]
需要将其分割为以空字符串为分隔符的非空子数组,最终结果如下:
[ ['1000', '2000', '3000'], ['4000'], ['5000', '6000'], ['7000', '8000', '9000'], ['10000'] ]
以下是两种可行的实现方案:
方案一:使用数组reduce方法
const originalArray = [ '1000', '2000', '3000', '', '4000', '', '5000', '6000', '', '7000', '8000', '9000', '', '10000' ]; const result = originalArray.reduce((acc, current) => { if (current === '') { // 遇到空串时,仅当最后一个子数组非空才新增空数组,避免连续空串生成空数组 if (acc.length === 0 || acc[acc.length - 1].length > 0) { acc.push([]); } } else { // 非空元素直接加入最后一个子数组,没有子数组则先创建 if (acc.length === 0) { acc.push([]); } acc[acc.length - 1].push(current); } return acc; }, []).filter(subArr => subArr.length > 0); // 过滤掉可能存在的空数组 console.log(result);
方案二:普通循环实现(更直观易懂)
const originalArray = [ '1000', '2000', '3000', '', '4000', '', '5000', '6000', '', '7000', '8000', '9000', '', '10000' ]; const result = []; let currentSubArr = []; for (const item of originalArray) { if (item === '') { // 遇到空串且当前子数组有内容时,将其存入结果并重置 if (currentSubArr.length > 0) { result.push(currentSubArr); currentSubArr = []; } } else { currentSubArr.push(item); } } // 处理循环结束后剩余的非空子数组 if (currentSubArr.length > 0) { result.push(currentSubArr); } console.log(result);
内容的提问来源于stack exchange,提问作者kickia
相关产品推荐
相关产品推荐

