标签:元素 个数 concat 参数 获取 rev targe 长度范围 数组元素
解法一: 以数组长度为维度,子数组的长度范围是1 至 arr.length,将每一轮长度的子集合并在一起即可。
var arr = [1,2,3,4,5,6,9];
var result = []
function getArrList(arr) {
for (let i = 1; i <= arr.length; i++) {
// getArrByLen 参数 arr: 原始数组、[]:上一轮结果、start:取item的起始位置、leftLength:目标数组的剩余空间
getArrByLen(arr, [], 0, i)
}
return result
}
function getArrByLen(originArr, prevArr = [], start, leftLength) {
for (let i = start; i < originArr.length; i++) {
let target = clone(prevArr);
let curLeft = leftLength
target.push(originArr[i])
if (--curLeft > 0) {
getArrByLen(arr, clone(target), i + 1, curLeft)
} else {
result.push(target)
}
}
}
function clone(arr) {
return [].concat(arr);
}
getArrList(arr)
解法二: 获取全部长度的子集
var arr = [1, 2, 3];
function desArr(arr) {
if (arr.length == 0) {
return []
}
var target = arr.shift()
return add(desArr(arr), target)
}
function add(list, target) {
for (var i = 0, len = list.length; i < len; i++) {
var newItem = clone(list[i])
newItem.push(target)
list.push(newItem)
}
list.push([target])
return list
}
function clone(arr) {
return [].concat(arr);
}
console.log(desArr(arr))
标签:元素 个数 concat 参数 获取 rev targe 长度范围 数组元素
原文地址:https://www.cnblogs.com/hjj2ldq/p/13068111.html