2015-09-14 1 views
2

У меня есть следующий сценарий:Как пропустить цикл после проверки наличия в объекте в JavaScript

var done = {'foo':1}; 
var mylist = ['foo','bar','qux']; 

mylist.forEach(function(val) { 
    // This if condition doesn't work 
    if (val in done) { continue;} 
    console.log(val) 
}); 

Что она делает это перебрать mylist и проверить, если какой-либо из членов уже существуют в done если так , пропустите его печать.

Но мой код дал это сообщение об ошибке:

Uncaught SyntaxError: Illegal continue statement(…) 

Намеченный результат:

bar 
qux 

Что правильный способ сделать это?

+1

возможно дубликат [ "продолжить" в cursor.forEach()] (HTTP://stackoverflow.com/questions/18452920/continue-in-cursor-foreach) – Andrey

ответ

3

continue не будет работать в forEach, как вы можете видеть здесь "continue" in cursor.forEach(). Вы можете использовать return вместо continue.

Вы можете использовать hasOwnProperty, чтобы проверить, есть ли объект в объекте.

var done = { 
 
    'foo': 1 
 
}; 
 
var mylist = ['foo', 'bar', 'qux']; 
 

 
mylist.forEach(function(val) { 
 
    // This if condition doesn't work 
 
    if (!done.hasOwnProperty(val)) { 
 
    console.log(val); 
 
    document.write(val + '<br />'); 
 
    } 
 
});

1

Вы можете использовать массива filter и Object.keys, если вы хотите сделать это в более читаемом виде:

var done = {'foo':1}; 
var mylist = ['foo','bar','qux']; 

// Utility function 
var has = function(obj, prop) { 
    return Object.keys(obj).indexOf(prop) !== -1; 
}; 

// Get missing values 
var missingValues = mylist.filter(function(val) { 
    return !(has(done, val)); 
}); 

// Print each of them 
missingValues.forEach(function(val) { 
    console.log(val); 
}); 

JSBin

2

Просто обратную логику в состояние:

var done = { foo: 1 }, 
 
    mylist = ['foo', 'bar', 'qux']; 
 

 
mylist.forEach(function (val) { 
 
    if (!(val in done)) { 
 
     document.write(val + '<br>'); 
 
    } 
 
});

return Или использовать для пропуска функции тока

var done = { foo: 1 }, 
 
    mylist = ['foo', 'bar', 'qux']; 
 

 
mylist.forEach(function (val) { 
 
    if (val in done) { 
 
     return; 
 
    } 
 
    document.write(val + '<br>'); 
 
});