Maison > Questions et réponses > le corps du texte
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
大家讲道理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);
仅有的幸福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
大家讲道理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)