JavaScript如何优雅实现[1,8]到1-8连续整数数组转换
JavaScript 从首尾边界数组生成连续整数数组的简洁实现
针对给定首尾边界数组(如[1,8])生成对应连续整数数组的需求,下面是几种社区常用的优雅写法,均支持自定义整数起止范围:
Array.from 映射法(首推)
没有多余的中间操作,语义直白,适配所有ES6及以上运行环境,是日常开发里最常用的方案:const getContinuousArr = ([start, end]) => Array.from({ length: end - start + 1 }, (_, idx) => start + idx) // 调用测试 getContinuousArr([1,8]) // 输出 [1,2,3,4,5,6,7,8]逻辑很简单:先根据首尾差值算出目标数组的总长度,再通过索引偏移直接算出每个位置对应的整数,不需要额外写for循环声明临时变量。
扩展运算符+索引迭代法
写法更精简,利用数组原生的keys迭代器先生成0起始的索引序列,再做数值偏移:const getContinuousArr = ([start, end]) => [...Array(end - start + 1).keys()].map(idx => start + idx)性能和第一种方案几乎没有差异,只是中间多了一步数组展开的操作,适合追求代码简短的场景。
兼容递减场景的通用写法
如果后续需要支持类似[8,1]生成倒序连续数组的需求,只需要加一步步长判断即可:const getContinuousArr = ([start, end]) => { const step = start > end ? -1 : 1 return Array.from({ length: Math.abs(end - start) + 1 }, (_, idx) => start + idx * step) }
避坑提示:不推荐用
new Array(n).fill(0).map()的写法,虽然填充基础类型值不会出引用问题,但语义上不如上面的写法直接,还多了一步无意义的fill操作。
内容的提问来源于stack exchange,提问作者DanielJK
相关产品推荐
相关产品推荐

