//arr 待处理的数组
//n 要取出的元素个数
//result 返回的结果
//current 当前已经取出的元素
const getCombine = (arr, n, result = [], current = '') => {
//如果只要取出一个元素,那就只需要将数组元素与已取出的元素组合
if (n === 1) {
result.push(...arr.map(v => `${current},${v}`));
return result;
}
//对当前数组进行遍历,剩余元素个数i等于要取出的元素个数时停止遍历
for (let i = 0; i < arr.length - n + 1; i++) {
//取出当前的元素与已取出的元素的组合
const temp = `${current},${arr[i]}`;
//递归调用,数组剪切,取出的个数减1
getCombine(arr.slice(i + 1), n - 1, result, temp);
}
return result;
}
let nums = [1, 0, -1, 0, -2, 2];
//开始调用,取出这个数组中5个数的所有集合
let result = getCombine(nums, 5);
result = result.map((item) => {
return item.match(/\d|\-\d/g);
})
//将数组中的字符串变为数字
var turnNum = function(nums) {
for (let i = 0; i < nums.length; i++) {
nums[i] = parseInt(nums[i])
}
return nums;
}
result.map((item) => {
return turnNum(item)
})
这个一个大神的嵌套数组去重方法
let result = [[1,2,3,4],[1,2,3,4]];
result = Array.from(new Set(result.map(item => JSON.stringify(item)))).map(i => JSON.parse(i))
console.log(result);
//[[1,2,3,4]]