如何用JavaScript编写简短代码输出给定数组的所有子数组
JavaScript 输出数组所有子数组的实现方案
子数组指的是数组内的连续元素序列,以下是不同形式的实现方案:
原参考代码逻辑说明
你提供的三层循环实现逻辑是通顺的,核心是遍历所有可能的子数组起止下标,拼接对应区间元素后输出:
var s = [1, 2, 3, 4, 5, 6]; for (var i = 0; i < s.length; i++) { for (var j = i; j < s.length; j++) { str = ""; for (var k = i; k <= j; k++) { str += s[k]; } console.log(str); } }
该方案时间复杂度为O(n³),可以通过JS内置的数组切片方法精简代码、优化执行效率。
更简短的实现方案
方案1:精简循环实现(直接打印子数组)
删除冗余的第三层拼接循环,用slice方法直接截取区间元素:
// 入参为任意目标数组 function printAllSubarrays(arr) { for (let i = 0; i < arr.length; i++) { for (let j = i; j < arr.length; j++) { // 如需输出拼接字符串,改为 arr.slice(i, j+1).join('') 即可 console.log(arr.slice(i, j + 1)) } } } // 调用示例 printAllSubarrays([1,2,3,4,5,6])
方案2:极简实现(返回包含所有子数组的二维数组)
如果不需要直接打印,而是要把所有子数组收集为新数组返回,可以用flatMap+map组合实现短代码写法:
const getAllSubarrays = arr => arr.flatMap((_, i) => arr.slice(i).map((_, j) => arr.slice(i, i + j + 1))) // 调用示例:输出包含所有子数组的二维数组 console.log(getAllSubarrays([1,2,3,4,5,6]))
内容的提问来源于stack exchange,提问作者Naseeb Shah
相关产品推荐
相关产品推荐

