Javascript 继续深入JS的2个级别
考虑以下非常简单的代码:Javascript 继续深入JS的2个级别,javascript,loops,continue,Javascript,Loops,Continue,考虑以下非常简单的代码: 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
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);
}
someLabel:
对于(var i=0;i也许类似的东西可以帮助解决您的问题:
var oldfonts = ['courier new', 'comic sans', 'century gothic'];
var newfonts = ['times new roman', 'comic sans', 'wingdings'];
var addfonts = [];
for (var i = 0; i < newfonts.length; i++) {
if (oldfonts.indexOf(newfonts[i]) < 0) { // if newfonts item doesnt exist in oldfonts array
addfonts.push(newfonts[i]); // add it to addfonts array to be added to oldfonts array systematically after all different font items are found
}
}
for(var i = 0; i < addfonts.length; i++) {
oldfonts.push(addfonts[i]); // push add fonts to oldfonts array
console.log(oldfonts);
}
var oldfonts=['courier new','comic sans','century gothic'];
var newfonts=['times new roman','comic sans','wingdings'];
var addfonts=[];
对于(var i=0;i
注释演示了如何继续标记语句。但对于您原来的问题,您可能可以更轻松地解决它:
var difference = function(x, y) {
return x.filter(function(e) {return y.indexOf(e) < 0;});
};
// or oldFonts = ... if you prefer to mutate
var combinedFonts = oldFonts.concat(difference(newFonts, oldFonts));
您可以看到这个
我迫不及待地想让胖箭广泛使用。以下是等效的:
var complement = (pred, a, b) => a.filter(x => !b.some(y => pred(x, y)));
var sameName = (a, b) => a.name === b.name;
continue someLabel
?@dfsq这是一个问题还是一个答案?您正在内部循环中重新定义var i
。使用另一个变量。@GOTO0非常好的观点。更新了问题。oldFonts
和newFonts
不是Array
,它们是Array
,而Font.name
是字体,所以indexOf()
不起作用。我现在知道这一点并不明显。更新了问题。旧字体
和新字体
不是数组
,它们是数组
,字体是Font.name
,所以indexOf()
不起作用。我现在知道这一点并不明显。更新了问题。更新了答案以处理更复杂的匹配机制。
var complement = (pred, a, b) => a.filter(x => !b.some(y => pred(x, y)));
var sameName = (a, b) => a.name === b.name;