function combination(originArr, count, condition, resArr = []) {
let res = []
if (resArr.length == 0) {
res = originArr.map(el => {
return [el]
})
} else {
for (const resItem of resArr) {
const tmpItemRes = originArr.map(el => {
return resItem.concat([el])
})
res = res.concat(tmpItemRes)
}
}
if (count === 1) {
if (condition) {
const tmpRes = []
for (const item of res) {
if (condition(item, tmpRes, res)) {
tmpRes.push(item)
}
}
return tmpRes
} else {
return res
}
} else {
return combination(originArr, 1, condition, res)
}
}
const testArr = [1, 2, 3, 4]
const res = combination(testArr, 2, (items, res1) => {
let tag = true
const tmpArr =[]
for(const item of items) {
if (tmpArr.indexOf(item) > -1) {
tag = false
break
} else {
tmpArr.push(item)
}
}
for(const resItems of res1) {
let tmpTag = false
for(const item of resItems) {
if (items.indexOf(item) === -1) {
tmpTag = true
break
}
}
if (!tmpTag) {
tag = false
break
}
}
return tag
})
console.log(res)
console