如何在JavaScript中检查对象是否存在后跳过循环

How to skip a loop after checking existence in an object in JavaScript

本文关键字:存在 循环 是否 对象 JavaScript 检查      更新时间:2023-09-26

我有以下脚本:

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

正确的做法是什么?

continue将无法在forEach中工作,正如您在这里看到的"continue"在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 />');
  }
});

将条件中的逻辑颠倒:

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>');
});

你可以使用Array的filterObject.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