不移除空白的数组拼接需求:相邻非空元素合并求助
嘿,这个需求我之前做项目时刚好碰到过!核心就是把连续的非空字符串合并,空字符串当作分隔符对吧?我给你几个实用的实现方式,从易理解到简洁版都有:
方法一:用forEach直观实现(适合新手)
这种写法逻辑直白,容易上手,适合刚开始接触数组操作的朋友:
const array = ['a','b','','c']; const result = []; let currentStr = ''; array.forEach(item => { if (item === '') { // 遇到空字符串,把当前拼接好的内容(如果有的话)加入结果 if (currentStr) { result.push(currentStr); currentStr = ''; } return; } // 非空字符串就拼到当前缓存里 currentStr += item; }); // 别忘了处理最后一组未加入的内容 if (currentStr) { result.push(currentStr); } console.log(result); // 输出: ['ab', 'c']
方法二:用reduce优雅处理
reduce是处理这类状态跟踪问题的利器,代码更紧凑,也很符合函数式编程的风格:
const array = ['a','b','','c']; // 初始化状态:保存结果数组和当前正在拼接的字符串 const initialState = { result: [], current: '' }; const finalState = array.reduce((state, item) => { if (item === '') { if (state.current) { state.result.push(state.current); state.current = ''; } return state; } state.current += item; return state; }, initialState); // 加入最后一组未完成的拼接内容 if (finalState.current) { finalState.result.push(finalState.current); } console.log(finalState.result); // 输出: ['ab', 'c']
这个方法通过一个状态对象同时跟踪最终结果和当前正在拼接的字符串,遍历完成后再处理剩余的拼接内容,逻辑和forEach版本完全一致,但代码更简洁。
方法三:巧用join/split的小技巧(注意局限性)
如果你的数组元素不会包含特殊字符(比如|),可以用这个更简洁的技巧:
const array = ['a','b','','c']; const result = array .join('|') // 先把数组转成带分隔符的字符串:'a|b||c' .split('||') // 用双分隔符分割成组:['a|b', 'c'] .map(str => str.replace(/\|/g, '')); // 去掉每组里的分隔符:['ab', 'c'] console.log(result); // 输出: ['ab', 'c']
⚠️ 注意:这个方法的局限性在于必须选一个数组元素中不存在的字符作为临时分隔符,如果你的元素可能包含|,就需要换其他符号(比如^、#等),否则会出错。
内容的提问来源于stack exchange,提问作者Gnex
相关产品推荐
相关产品推荐

