javascript – So implementieren Sie verschachtelte Methoden mit angegebener Tiefe in js
PHP中文网
PHP中文网 2017-05-19 10:43:39
0
3
493

Ich habe heute ein Problem bei der Implementierung eines Algorithmus mit js festgestellt. Wie kann ich bei gegebener Funktion und Verschachtelungstiefe (int-Typ) eine verschachtelte Struktur zurückgeben?

Gegebene Parameter: fn, deepLength

Rückgabestruktur (nehmen Sie als Beispiel 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])
      }
    }
  }

Nachdem ich eine Weile darüber nachgedacht habe, scheint es, dass dies nur durch verschachtelte Funktionen erreicht werden kann. Gibt es eine elegantere Implementierungsmethode?


Ich habe alle Methoden zusammengefasst und sie als Referenz auf eine Demoseite gestellt

Angehängter Link zur Interviewfrage: Kekse teilen

PHP中文网
PHP中文网

认证0级讲师

Antworte allen(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)
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage