cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Bagaimana untuk melaksanakan kaedah bersarang dengan kedalaman tertentu dalam js

Saya menemui soalan temu bual hari ini Saya mendapati masalah apabila menggunakan js untuk melaksanakan algoritma Bagaimana untuk menggunakan js untuk melaksanakan kaedah sedemikian (jenis int), kembalikan struktur bersarang seperti yang ditunjukkan di bawah.

Parameter yang diberikan: fn, DeepLength

Struktur pemulangan (ambil deepLength=3 sebagai contoh):

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

Setelah difikirkan seketika, nampaknya ia hanya boleh dicapai melalui fungsi bersarang Adakah terdapat kaedah pelaksanaan yang lebih elegan?


Saya meringkaskan kaedah semua orang dan meletakkannya pada halaman demo untuk rujukan anda

Dilampirkan pautan kepada soalan temuduga: Membahagi kuki

PHP中文网PHP中文网2775 hari yang lalu479

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理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);

    balas
    0
  • 仅有的幸福

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

    Dilaksanakan dengan membina rentetan, tetapi ia terasa terlalu tidak elegan. .

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

    Kod rujukan soalan temuduga

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

    balas
    0
  • Batalbalas