【问题标题】:How to skip a loop after checking existence in an object in JavaScript在 JavaScript 中检查对象是否存在后如何跳过循环
【发布时间】:2015-12-10 04:37:54
【问题描述】:

我有以下脚本:

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

正确的做法是什么?

【问题讨论】:

标签: javascript html


【解决方案1】:

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

【讨论】:

    【解决方案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>');
    });

    【讨论】:

      【解决方案3】:

      如果您希望以更易读的方式进行操作,可以使用 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-18
        • 2021-04-28
        • 1970-01-01
        • 2021-11-25
        相关资源
        最近更新 更多