javascript - Bagaimana untuk melaksanakan kaedah bersarang dengan kedalaman tertentu dalam js
PHP中文网
PHP中文网 2017-05-19 10:43:39
0
3
474

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中文网

认证0级讲师

membalas semua(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);
仅有的幸福

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

大家讲道理
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)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan