JS数组拼接时如何将指定元素"Bye"固定放在拼接结果末尾
实现方案
基于现有过滤逻辑改造
你可以直接在原有filter(Boolean)的逻辑里新增判断,过滤掉"Bye"元素后统一追加到结果末尾,改动最小:
// 始终在末尾追加Bye的写法 const result = input .filter(item => Boolean(item) && item !== 'Bye') .concat('Bye') .join('@')
如果要求仅原数组存在"Bye"时才追加,可调整为:
let hasBye = false const result = input .filter(item => { if (!Boolean(item)) return false if (item === 'Bye') { hasBye = true return false } return true }) .concat(hasBye ? 'Bye' : []) .join('@')
这种写法用concat后再join,可以避免过滤后的数组为空时出现开头带@的异常,比直接拼接+ '@Bye'更稳妥。
最高效单遍历实现
如果处理的是大体积数组,推荐用reduce一次遍历完成所有逻辑,避免多次遍历数组,性能最优:
const { validList, byeList } = input.reduce((acc, curr) => { if (!curr) return acc if (curr === 'Bye') { acc.byeList.push(curr) return acc } acc.validList.push(curr) return acc }, { validList: [], byeList: [] }) const result = validList.concat(byeList).join('@')
这种写法还兼容原数组存在多个"Bye"的场景,会把所有"Bye"都放到结果末尾。
验证结果
针对你给出的示例输入,上述所有方案的输出都和预期一致:"Hi@Hello@Jose@Juan@How@Disco@Bye"
内容的提问来源于stack exchange,提问作者Code Guy
相关产品推荐
相关产品推荐

