我有以下结构:
注意:此示例中的数组和目标只是符号!我知道这个例子会有更好的解决方案 - 它只是为了演示代码的构造。
var firstArray = [1,2,3,4,5];
var secondArray = [1,2,4,5];
$.each(firstArray,function(i,firstArrayElement){
$.each(secondArray,function(i,secondArrayElement){
if(firstArrayElement === secondArrayElement) {
// do stuff
// PROBLEM: force the firstArray loop to continue with the next iteration
}
});
console.log("Didn't find: "+firstArrayElement);
});
澄清我的问题:有没有办法强制父.each继续(=跳过console.log
)下一次迭代?在PHP中,这将是continue 2;
。因此,目标是,如果条件为真,则永远不会到达console.log()
(在此示例中找到元素)。
有the flag解决方案(jsFiddle),但必须有一个更好的方法来做到这一点。
还有solutions with labels但标签不适用于.each()。
所以我正在寻找的可能是在没有标志的父函数中使用return
的方法。对于上面的示例,这意味着结果记录:Didn't find 3
答案 0 :(得分:2)
所以,这有点hacky ......但它确实实现了在没有标志的情况下返回true函数的目标:
var firstArray = [1,2,3,4,5];
var secondArray = [1,2,4,5];
$.each(firstArray, function(i, firstArrayElement) {
try
{
$.each(secondArray, function(i, secondArrayElement) {
if (firstArrayElement === secondArrayElement) {
throw 'Found';
}
});
} catch(err) {
return true;
}
console.log("Didn't find: "+firstArrayElement);
});
答案 1 :(得分:2)
$.each
方法的响应始终是迭代的对象。如果我们可以控制这个,就会有一个选择。我们不能,你将无法逃脱旗帜解决方案。
如果你打开放弃$.each
,至少在内循环中,并使用for
,这应该可以胜任:
var firstArray = [1, 2, 3, 4, 5],
secondArray = [1, 2, 4, 5];
$.each(firstArray,function(i, firstArrayElement) {
var x = null;
for (var j = 0; j < secondArray.length; j++) {
var secondArrayElement = secondArray[j];
if (firstArrayElement === secondArrayElement) {
console.log('Do stuff');
// return false here if you wan't to break after the first match.
} else if (j + 1 == secondArray.length) {
return false;
}
}
console.log('Didn\'t find: ' + firstArrayElement);
});
答案 2 :(得分:0)
$.each(firstArray,function(i,firstArrayElement){
var idx = $.inArray(firstArray[i], secondArray);
if(idx == -1) {
console.log("Didn't find: "+firstArrayElement);
}
else{
//to do...
}
});
我不知道它是否适合您的问题...
答案 3 :(得分:0)
<强>解决方案:强>
在评论中找到解释。
$.each(firstArray,function(i,firstArrayElement){
//Initialize skipParent at each Iteration
var skipParent = false;
$.each(secondArray,function(i,secondArrayElement){
if(firstArrayElement === secondArrayElement) {
// do stuff
//set skipParent to true
skipParent = true;
}
});
//if skipParent true, we continue to next iteration.
if(skipParent)
{
console.log("Didn't find: "+firstArrayElement);
return false;
}
});