R K*_*R K 6 javascript optimization
我有以下代码遵循循环模式,我有一种感觉,代码可以缩小为代码或任何不那么难看的代码的递归,但我无法弄明白.
我想从跑了六圈在另一个内1000
,以10000
在JavaScript中,我看,如果能够再缩小代码.
我是编码初学者,但我可以接受各种方法.
我正在更新代码,因为以前的代码可能会让某些用户感到暧昧.
function dummyFunc(x,y){
if( some logic for x == some logic for y){
return true;
}
return false;
}
for(var i = 1000;i < 10000;i++){
for(var j = 1000;j < 10000;j++){
if(dummyFunc(i,j)){
for(var k = 1000;k < 10000;k++){
if(dummyFunc(j,k)){
for(var l = 1000;l < 10000;l++){
if(dummyFunc(k,l)){
for(var m = 1000;m < 10000;m++){
if(dummyFunc(l,m)){
for(var n = 1000;n < 10000;n++){
if(dummyFunc(m,n)){
break;
}
}
}
}
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将for循环提取到函数中:
function range(start, end, callback) {
for(let i = start, start < end, i++)
callback(i);
}
Run Code Online (Sandbox Code Playgroud)
这可以用作:
range(1000, 10000, i => {
range(1000, 10000, j => {
range(1000, 10000, k => {
range(1000, 10000, l => {
range(1000, 10000, m => {
range(1000, 10000, n => {
console.log(i, j, k, l, m, n);
});
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
为了进一步简化,您可以使用生成可以解构的值数组的生成器:
function* ranges(start, end, repeats) {
if(repeats > 1) {
for(const values of ranges(start, end, repeats - 1)) {
for(const value of ranges(start, end, 0)) {
yield values.concat(value);
}
}
} else {
for(let i = start; i < end; i++)
yield [i];
}
}
Run Code Online (Sandbox Code Playgroud)
这可以用作:
for(const [i, j, k, l, m, n] of ranges(1000, 10000, 6)) {
console.log(i, j, k, l, m, n);
}
Run Code Online (Sandbox Code Playgroud)