Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 优化循环,避免浪费查找_Javascript_For Loop - Fatal编程技术网

Javascript 优化循环,避免浪费查找

Javascript 优化循环,避免浪费查找,javascript,for-loop,Javascript,For Loop,我有以下JavaScript代码: var postcodes = [['BD1',8],['BD2',20],['BD7',30]]; var rangeColours = [['red',10],['black',20],['blue',30]]; var postcodeColours = []; for(var i=0; i<postcodes.length; i++) { var match = 0; for(

我有以下JavaScript代码:

    var postcodes = [['BD1',8],['BD2',20],['BD7',30]];

    var rangeColours = [['red',10],['black',20],['blue',30]];

    var postcodeColours = [];

    for(var i=0; i<postcodes.length; i++) {
        var match = 0;
        for(var x=0; x<rangeColours.length; x++) {
            if(postcodes[i][1] <= rangeColours[x][1] && match == 0){
                postcodeColours.push([postcodes[i][0],rangeColours[x][0]]);
                match = 1;
            } 
        }   
    }
我想知道是否有办法使代码更有效,特别是在减少第二个for循环中出现的浪费性查找方面?目前,我正在使用match变量,如果postcodes数组元素的值小于rangecolors数组元素的值,则将其设置为1,以确保推送不会对每个postcodes数组元素重复,有没有更优雅的方法


非常感谢

如果您真的想优化查找,您可以将循环体中的邮政编码[i]和RangeColors[x]的冗余查找隐藏在本地

for(var i=0; i<postcodes.length; i++) {
    var postcodeCurrent = postcodes[i];
    var match = 0;
    for(var x=0; x<rangeColours.length; x++) {
        var rangeColourCurrent = rangeColours[x];
        if(postcodesCurrent[1] <= rangeColoursCurrent[1] && match == 0){
            postcodeColours.push([postcodesCurrent[0],rangeColoursCurrent[0]]);
            match = 1;
        } 
    }   
}

但我不确定这是否会对性能产生显著影响。这感觉像是一个微观优化

如果您真的想优化查找,您可以通过将邮政编码[i]和RangeColors[x]存储在本地文件中,来删除循环正文中的冗余查找

for(var i=0; i<postcodes.length; i++) {
    var postcodeCurrent = postcodes[i];
    var match = 0;
    for(var x=0; x<rangeColours.length; x++) {
        var rangeColourCurrent = rangeColours[x];
        if(postcodesCurrent[1] <= rangeColoursCurrent[1] && match == 0){
            postcodeColours.push([postcodesCurrent[0],rangeColoursCurrent[0]]);
            match = 1;
        } 
    }   
}

但我不确定这是否会对性能产生显著影响。这感觉像是一个微观优化

你当然可以这样做:

for(var i=0; i<postcodes.length; i++) {
    var match = 0,
        codes = postcodes[i],
        coloursLength = rangeColours.length;
    for(var x=0; x<coloursLength; x++) {
        var colours = rangeColours[x];
        if(codes[1] <= colours[x][1] && match == 0){
            postcodeColours.push(codes[0], colours[0]);
            match = 1;
        }
    }
}

你当然可以这样做:

for(var i=0; i<postcodes.length; i++) {
    var match = 0,
        codes = postcodes[i],
        coloursLength = rangeColours.length;
    for(var x=0; x<coloursLength; x++) {
        var colours = rangeColours[x];
        if(codes[1] <= colours[x][1] && match == 0){
            postcodeColours.push(codes[0], colours[0]);
            match = 1;
        }
    }
}
使用语句

for(var i=0; i<postcodes.length; i++) {
    for(var x=0; x<rangeColours.length; x++) {
        if(postcodes[i][1] <= rangeColours[x][1]){
            postcodeColours.push([postcodes[i][0],rangeColours[x][0]]);
            break;
        } 
    }   
}
使用语句

for(var i=0; i<postcodes.length; i++) {
    for(var x=0; x<rangeColours.length; x++) {
        if(postcodes[i][1] <= rangeColours[x][1]){
            postcodeColours.push([postcodes[i][0],rangeColours[x][0]]);
            break;
        } 
    }   
}
您可以在找到匹配项后设置x的值,而不是使用匹配变量或break

for(var i=0; i<postcodes.length; i++) {
    for(var x=0; x < rangeColours.length; x++){
        if(postcodes[i][1] <= rangeColours[x][1]){
            postcodeColours.push([postcodes[i][0],rangeColours[x][0]]);
            x = rangeColours.length;
        }  
    }
}
您可以在找到匹配项后设置x的值,而不是使用匹配变量或break

for(var i=0; i<postcodes.length; i++) {
    for(var x=0; x < rangeColours.length; x++){
        if(postcodes[i][1] <= rangeColours[x][1]){
            postcodeColours.push([postcodes[i][0],rangeColours[x][0]]);
            x = rangeColours.length;
        }  
    }
}

这是应该在代码中更改的第一件事。是的,对我来说,其他的东西似乎像是微优化,可能是由编译器自己完成的,但不确定这一点。这段代码看起来更具可读性。这是应该在代码中更改的第一件事。是的,对我来说,其他东西似乎像是微优化,可能由编译器自己完成,但不确定这一点。这段代码看起来更易读。这就是RangeColors继续的方式。。。增加10?如果是这样,您应该能够完全消除内部循环。@不,它可以包含任意数量的值,谢谢。RangeColors就是这样继续的。。。增加10?如果是这样,您应该能够完全消除内部循环。@不,它可以包含任意数量的值,谢谢。为什么要在break语句上使用它?为什么要在break语句上使用它?