javascript - Comment implémenter des méthodes imbriquées avec une profondeur spécifiée dans JS
PHP中文网
PHP中文网 2017-05-19 10:43:39
0
3
507

J'ai rencontré une question d'entretien aujourd'hui. J'ai trouvé un problème lors de l'utilisation de js pour implémenter un algorithme. Comment utiliser js pour implémenter une telle méthode, étant donné une fonction et une profondeur d'imbrication (type int), renvoyer une structure imbriquée comme indiqué ci-dessous ?

Paramètres donnés : fn, deepLength

Structure de retour (prenons deepLength=3 comme exemple) :

  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])
      }
    }
  }

Après y avoir réfléchi un moment, il semble que cela ne puisse être réalisé que grâce à des fonctions imbriquées. Existe-t-il une méthode d'implémentation plus élégante ?


J'ai résumé les méthodes de chacun et je les ai mises sur une page de démonstration pour votre référence

Lien ci-joint vers la question d'entretien : Diviser les cookies

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(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);
仅有的幸福

Implémenté en construisant des chaînes, mais cela semble trop inélégant. .

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

Code de référence des questions d'entretien

大家讲道理
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)
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal