在 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 的 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
【讨论】:
以上是关于在 JavaScript 中检查对象是不是存在后如何跳过循环的主要内容,如果未能解决你的问题,请参考以下文章
检查对象值是不是存在于 Javascript 对象数组中,如果不存在则将新对象添加到数组
检查未知对象中的对象是不是存在的最有效的Javascript方法[重复]
如何检查 Javascript 中是不是存在字符串/数组/对象? [复制]