recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Comment implémenter des méthodes imbriquées avec une profondeur spécifiée dans JS

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中文网2816 Il y a quelques jours512

répondre à tous(3)je répondrai

  • 大家讲道理

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

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

    répondre
    0
  • 仅有的幸福

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

    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

    répondre
    0
  • 大家讲道理

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

    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)

    répondre
    0
  • Annulerrépondre