【发布时间】:2015-07-14 20:41:13
【问题描述】:
考虑这个非常简单的代码:
someLabel:
for (var i=0; i<newFonts.length; i++) {
var newFont = newFonts[i];
for (var j=0; j<oldFonts.length; j++) {
var oldFont = oldFonts[j];
if (fb.equals(oldFont, newFont)) {
// Break out of inner loop, don't finish outer iteration, continue with next outer item
continue 2;
}
}
// This must only happen if `newFont` doesn't match ANY `oldFonts`
oldFonts.push(newFont);
}
假定要做的是将所有oldFonts objects 与newFonts objects 进行比较,并且只将newFont 添加到@987654326 @ (oldFonts.push) 如果它尚不存在 (fb.equals)。
oldFonts 和 newFonts 是具有 name 和 host 属性的对象。两者都在fb.equals() 中用于确定相等性。 indexOf() 不起作用。
这正是我在 PHP 中的做法。在 JS 中不行,因为 JS 不支持continue 2,也就是说继续 2 级。
我如何在 JS 中做到这一点??
-
continue不会这样做,因为它仍然会完成内部循环并最终到达push -
break不会这样做,因为它会跳过内部循环并直接跳转到push -
break someLabel不会这样做,因为我不想跳过所有newFonts当必须忽略一个时
这必须在没有单一功能的情况下是可能的......
【问题讨论】:
-
continue someLabel? -
@dfsq 这是一个问题还是一个答案?
-
您正在内部循环中重新定义
var i。使用不同的变量。 -
@GOTO0 非常好的观点。更新的问题。
标签: javascript loops continue