搜尋

首頁  >  問答  >  主體

javascript - js如何實作指定深度的巢狀方法

今天遇見一個面試題,用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中文网2794 天前497

全部回覆(3)我來回復

  • 大家讲道理

    大家讲道理2017-05-19 10:45:39

    雷雷

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-19 10:45:39

    使用構建字串的方式實現了,但感覺太不優雅了。 。

    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;
    }

    面試題參考代碼

    回覆
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:45:39

    雷雷

    回覆
    0
  • 取消回覆