Rumah > Soal Jawab > teks badan
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
大家讲道理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
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
大家讲道理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)