获取数组中特定值的数组

有如下题目:根据指定元素,在数组里面找出类数组。比如数组 [2, 3, 5, 7] ,指定元素 5,则类数组是 [2,, 3] 和 [5],因为上面两个数组的元素之和相加为5。自己想了一下, 实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
** description 得到
** arr 传入的数组
** value 得到的类数组的值
** maxLen 类数组的最大长度
**/
function compile(arr, value, maxLen = arr.length) {
if (!arr.length || !value) return;
let result = [];
let tempArr = [];
const len = arr.length;
let nowIndex = 0;
while (nowIndex < len) {
if (tempArr.length > 0) {
let temp = [];
for (let item of tempArr) {
temp.push([...item, arr[nowIndex]]);
}
tempArr = [...tempArr, ...temp];
}
tempArr.push([arr[nowIndex]]);
nowIndex++;
}
result = tempArr.filter(arr => (arr.reduce((pev, now) => (pev = pev + now) && pev, 0) === value) && (arr.length <= maxLen) );
return result;
}
实现的效果如下:
1
compile([1, 2, 3], 5)  // [2, 3]