至少显示阵列中的一个联机项目
Show at least one online item from array
我有一个按距离排序的用户数组。我想显示最接近的5个项目,但有时最接近的五个项目都处于"脱机"状态,在这种情况下,我想确保至少添加一个"联机"项目。
这是我迄今为止的尝试,但没有完全奏效。它没有像我想要的那样显示5个"离线"项目加1个"在线"项目,而是显示了所有项目。
var items = 0;
var online = usersOnline();
var itemsOnline = 0;
for (var i = 0; i < nearest.length; i++) {
var item = nearest[i];
if ( items < 5 ) {
items++;
if ( item.state != "offline" ) { itemsOnline++; }
jQuery( "#leaflet-control-geosearch-results" ).append( "<li id='record-"+item.label+"'><label><input type='checkbox' class='cb' value='"+item.id+"'> <img src='img/presence/"+item.state+"_map.png' height='10px'> "+item.label+" ("+parseFloat(item.distance / 1000).toFixed(2)+strings[strLang].nearestMetre+")</label><div class='icons'><a title='"+strings[strLang].nearestLocate+"' class='locate' href='"+item.label+"'><img src='img/icons/locate.png' height='15px' /></a> <a title='"+strings[strLang].routeGet+"' class='directions' href='"+item.label+"'><img src='img/icons/directions.png' height='15px' /></a></div><div class='clear'></div></li>" );
}
}
while (( online > 0 ) && ( itemsOnline < 1 )) {
for (var i = 0; i < nearest.length; i++) {
var item = nearest[i];
if ( item.state != "offline" ) {
itemsOnline++; }
jQuery( "#leaflet-control-geosearch-results" ).append( "<li id='record-"+item.label+"'><label><input type='checkbox' class='cb' value='"+item.id+"'> <img src='img/presence/"+item.state+"_map.png' height='10px'> "+item.label+" ("+parseFloat(item.distance / 1000).toFixed(2)+strings[strLang].nearestMetre+")</label><div class='icons'><a title='"+strings[strLang].nearestLocate+"' class='locate' href='"+item.label+"'><img src='img/icons/locate.png' height='15px' /></a> <a title='"+strings[strLang].routeGet+"' class='directions' href='"+item.label+"'><img src='img/icons/directions.png' height='15px' /></a></div><div class='clear'></div></li>" );
}
}
}
只需一次通过/循环就可以完成整个过程:
尝试:
var items = 0;
var online = usersOnline();
var itemsOnline = 0;
for (var i = 0; i < nearest.length; i++) {
var item = nearest[i];
if (item.state != "offline") {
itemsOnline++;
} else if (items >= 5) {
// we already have 5 items, so we're now only interested in online items. this new one is an offline one, so skip it
continue;
}
items++;
jQuery( "#leaflet-control-geosearch-results" ).append( "<li id='record-"+item.label+"'><label><input type='checkbox' class='cb' value='"+item.id+"'> <img src='img/presence/"+item.state+"_map.png' height='10px'> "+item.label+" ("+parseFloat(item.distance / 1000).toFixed(2)+strings[strLang].nearestMetre+")</label><div class='icons'><a title='"+strings[strLang].nearestLocate+"' class='locate' href='"+item.label+"'><img src='img/icons/locate.png' height='15px' /></a> <a title='"+strings[strLang].routeGet+"' class='directions' href='"+item.label+"'><img src='img/icons/directions.png' height='15px' /></a></div><div class='clear'></div></li>" );
if (items >= 5 && itemsOnline >= 1) {
// we've now got at least 5 items, and at least 1 is online, so we're done.
break;
}
}
只有在内部for循环完成对整个nearest
数组的迭代后,才会评估while循环条件。
由于只需要通过nearest
数组提交一次就可以获得在线项目,因此可以用if语句替换while循环:
if (itemsOnline < 1) {
for (var i = 5; i < nearest.length; i++) { // start from 6th element
var item = nearest[i];
if (item.state != "offline") {
jQuery("#leaflet-control-geosearch-results").append(etc);
break; // exit loop
}
}
}
var items = 0;
var online = usersOnline();
var itemsOnline = 0;
for ( var i = 0; i < nearest.length && items < 5; i++, items++ ) {
var item = nearest[i];
items++;
if ( item.state != "offline" ) { itemsOnline++; }
apendItem( item );
}
for ( var i = 5; i < nearest.length && itemsOnline < 1; i++ ) {
var item = nearest[i];
apendItem( item );
break;
}
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- jQuery:循环一个具有不同超时值的循环
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 从javascript创建一个列表
- 节点导出返回一个空对象
- 使用clickToggle并在单击另一个元素时关闭元素
- 我可以在json对象中添加一个函数吗
- 使用javascript将动态表从一个html页面打印到另一个html页
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 表追加而不附加最后一个元素
- 我如何找到一个句子中的所有空格并替换忽略它们
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何在android中使用phonegap将文件从一个文件夹移动/复制到另一个文件夹
- 使用类从一个标记中双击事件
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 我应该如何从xml文件构建一个javascript页面
- 至少显示阵列中的一个联机项目
- 办公室联机:WOPI PutFile 收到一个空请求