javascript - js如何实现指定深度的嵌套方法
PHP中文网
PHP中文网 2017-05-19 10:43:39
[JavaScript讨论组]

今天遇见一个面试题,用js实现算法时发现一个问题,如何用js实现这样一个方法,给定一个函数和嵌套深度(int类型),返回如下所示的一个嵌套的结构?

给定参数:fn,deepLength

返回结构(以deepLength=3为例):

  for (var x = 0; x <= 9; x++) {
    for (var y = 0; y <= 9; y++) {
      for (var z = 0; z <= 9; z++) {
        rs = fn([x,y,z])
      }
    }
  }

想了一阵,感觉好像只能通过嵌套函数实现,是否有比较优雅的实现方法呢?


总结了一下大家的方法,放到了一个demo页面里,供大家参考

附带链接 面试题:分饼干

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
大家讲道理
function loop(fn, n, args = []) {
  if (n === 0) {
    fn.apply(null, args);
    return;
  }

  for (let i = 0; i <= 9; i++) {
    loop(fn, n - 1, args.concat(i));
  }
}


loop((...args) => {
  console.log(args);
}, 3);
仅有的幸福

使用构建字符串的方式实现了,但感觉太不优雅了。。

var deep = (fn, deeplen) =>{
  var rs = null;
  var args = [];
  var content = 'var trueArgs = [];for(var i =0;i<args.length;i++){trueArgs[i]=eval(args[i])}rs = fn(trueArgs);';
  for (var i = 0; i < deeplen; i++) {
    args.push(`iter${i}`);
    content = `for ( var iter${i} = 0; iter${i}<=9; iter${i}++){ ${content} }`;
  }
  new Function('fn', 'args', content)(fn, args);
  return rs;
}

面试题参考代码

大家讲道理
let loop = (fn, layer) => {
    return (arr) => {
        for (let i = 0; i <= 9; i++) {
            arr[layer] = i
            fn(arr)
        }
    }
}
let nestedLoop = (fn, deepLength) => {
    for (let i = deepLength; i > 0; i--) {
        fn = loop(fn, i - 1)
    }
    fn ([])
}

nestedLoop((arr) => console.log(arr.join('')), 3)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号