首页 > 解决方案 > javascript中的递归forEach()

问题描述

我有一堆数字数组,例如:

let a = [1,2,3];
let b = [4,5,7];
let c = [11,13,17]

我想创建一个函数,告诉我数组中的数字组合乘以不同数组中的数字会得到某个数字。以下是我到目前为止的代码:

// to get which combination of numbers result to 165
a.forEach(x=>{
    b.forEach(y=>{
        c.forEach(z=>{
        if(x*y*z==165){
            console.log(x,y,z)
        }
        })
    })
})

我想创建一个函数,它可以输入一个数字数组的数组,例如:[[1,2],[2,5,],[7,11],[13,17]]并返回数字组合,当它们相乘时,可以得到一个特定的数字。

标签: javascriptarraysrecursionmathmultiplication

解决方案


这是一个递归函数,它接受输入数字和数字数组的数组。它通过第一个数字数组进行处理,找到任何可能的除数,如果是,则使用除法输入和数组的余额递归调用自己,以查看该对值中是否有任何除数。如果是这样,则将它们附加到当前除数以产生结果:

const findDivisors = (num, arrs) => {
  let result = [];
  if (arrs.length == 1) {
    return arrs[0].filter(n => n == num);
  }
  arrs[0].forEach(n => {
    if (num % n === 0) {
      findDivisors(num / n, arrs.slice(1)).forEach(r => result.push([n].concat(r)));
    }
  });
  return result;
}

let a = [1, 2, 3];
let b = [4, 5, 7];
let c = [11, 13, 17];
console.log(findDivisors(165, [a, b, c]));
console.log(findDivisors(136, [a, b, c]));


推荐阅读