优化循环,避免浪费查找
Optimising for loop, avoiding wasteful lookups
我有以下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;
}
}
}
代码的输出是:(顺便说一下,这很好)
[BD1,red][BD2,black][BD7,blue]
我想知道是否有办法使代码更有效率,尤其是在减少第二个 for 循环中发生的浪费性查找方面?目前,我正在使用"match"变量并将其设置为 1,如果邮政编码数组元素的值小于 rangeColors 数组元素的值,以确保不会对每个邮政编码数组元素重复推送,有没有更优雅的方法做到这一点?
非常感谢
如果你真的想优化查找,你可以通过将postcodes[i]
和rangeColours[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;
}
}
}
不过,我不确定这是否会对性能产生明显影响。 感觉就像一个微优化。
使用 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;
}
}
}
你当然可以做这样的事情:
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;
}
}
}
与其使用 match
变量或break
,您可以在找到匹配项后设置 x
的值。
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;
}
}
}
相关文章:
- 如何循环遍历数组并查找if键
- 如何循环浏览页面源中的所有文本框元素并查找所有这些文本框的名称
- 在 for 循环中查找变量的迭代总和
- 循环遍历表中的行并获取行查找错误中的每个值
- 如何循环对象中的javascript对象并查找属性
- 使用for循环查找字符串中的特定字符
- javascript关键字查找器循环
- 循环字符串以查找字符集之间的文本
- 使用While和For循环查找上界之间的所有素数的程序
- 循环通过表格查找第一个具有 CSS CSSstablelisttdselect 的 TD 文本
- Javascript循环数组以查找可被3整除的数字
- 如何使用jquery在循环中查找和替换
- 在 JavaScript 中使用循环查找第 n 项斐波那契数列
- 在对象中查找值时,对于循环计数器
- 查找模式 遍历多个数组的 FOR 循环
- 查找循环数组中任意两个索引之间的中间索引
- 优化循环,避免浪费查找
- 在循环中缓存数组查找是否有任何性能提升
- JS:while循环以查找连续整数的乘积
- 循环绑定以查找循环数