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

Posted

技术标签:

【中文标题】在 JavaScript 中检查对象是不是存在后如何跳过循环【英文标题】: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

正确的做法是什么?

【问题讨论】:

"continue" in cursor.forEach() 的可能重复项 【参考方案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

【讨论】:

以上是关于在 JavaScript 中检查对象是不是存在后如何跳过循环的主要内容,如果未能解决你的问题,请参考以下文章

检查对象值是不是存在于 Javascript 对象数组中,如果不存在则将新对象添加到数组

检查未知对象中的对象是不是存在的最有效的Javascript方法[重复]

如何检查javascript中的对象中是不是存在键[重复]

如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]

检查 JavaScript 中是不是存在深度嵌套对象属性的最简单方法是啥? [复制]

JavaScript:检查对象数组中是不是存在重复的键值并删除所有但最近添加的具有该键值的对象