一道js的数组算法题

有一个数组:

const arr = [[1,2],3,[4,5,6]];

定义一个函数,传入arr后,返回值为一个二维数组:

[[1,3,4],[2,3,4],[1,3,5],[2,3,5],[1,3,6],[2,3,6]]
阅读 2.3k
2 个回答
function f(arr) {
  var ret = []

  function fi(result, i) {
    if (i === -1) {
      ret.push(result)
    } else {
      let items = arr[i]
      if (!Array.isArray(items)) {
        items = [items]
      }
      items.forEach(item => {
        fi([item,...result], i - 1)
      });
    }
  }
  fi([], arr.length - 1)
  return ret
}
const arr = [[1,2],3,[4,5,6]];
console.log(f(arr))
function multiply(arr1, arr2) {
  let r = []
  arr1 = Array.isArray(arr1) ? arr1 : [arr1]
  arr2 = Array.isArray(arr2) ? arr2 : [arr2]
  arr1.forEach(function(i){
    arr2.forEach(function(j){
      let item = (Array.isArray(i) ? i : [i]).concat(j)
      r.push(item)
    })
  })
  return r
}

const arr = [[1,2],3,[4,5,6]]
let result = arr.reduce((acc, curr) => multiply(acc, curr))
console.log('result', result)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题