forEach中的return语句不会停止函数的执行
return statement in forEach won't stop execution of function
我试图确定数组是否包含某个项目。如果有,我希望保留这个函数,否则它应该被添加。
function addPacking(item){
data.packings.forEach(function(entry){
if(item.name == entry.name){
return;
}
});
data.packings.push(item);
}
不幸的是,即使满足if条件,数据也会被推送。如何在不使用else
条件的情况下防止这种行为?
(我不想使用else
,因为我的实际代码比这复杂得多,我想保持它的可读性)
forEach
是否异步执行?
老方法有时是最好的。这是因为你在调用.forEach
时传递了一个委托函数。委托中的return
正在丢失,并且没有应用于任何东西。为了得到想要的结果,您需要退出调用函数addPacking
。这可以使用一个简单的for
循环来完成。
function addPacking(item){
for (var i = 0; i < data.packings.length++; i++) {
if (item.name == data.packings[i].name) {
return;
}
}
data.packings.push(item);
});
此方法也支持较旧的浏览器,不像some
, every
和forEach
除了抛出异常(@Yoshi)之外,您不能停止forEach的执行。不应将其视为影响程序代码流的选项(@Me)。
你能做的是使用另一个方法some
或every
function addPacking(item){
var contains = data.packings.every(function(entry){
return item.name != entry.name;
});
if(contains) {
data.packings.push(item);
}
}
或
function addPacking(item){
var conatins = !data.packings.some(function(entry){
return item.name == entry.name;
});
if(contains) {
data.packings.push(item);
}
}
老问题,但万一有人遇到这个问题。
如果你正在使用ECMAScript 6,你可以使用Array find()方法
var found = myArray.find(function (element) { return element === arrayToFind; });
所以对于这个特殊的场景将是:
function addPacking(item){
var foundItem = data.find(function(entry){ return entry.name == item.name});
if (foundItem) data.packings.push(foundItem);
}
参见http://www.w3schools.com/jsref/jsref_find.asp查看另一个工作示例。
Return只是中止forEach
中调用的函数,而不是您的addPackings
函数。
function addPacking(item){
var isInPackings = false;
data.packings.forEach(function(entry){
if(item.name == entry.name){
isInPackings = true;
}
});
if (!isInPackings)
data.packings.push(item);
}
你只是从子函数返回而不是从父函数返回
function addPacking(item){
var check=false;
data.packings.forEach(function(entry){
if(item.name == entry.name){
check=true;
return;
}
});
if (check) return;
data.packings.push(item);
}
相关文章:
- 等待回调函数执行
- 暂停函数执行流程,直到ajax请求完成
- Bigcommerce-是否可以在函数执行后更改文本
- 如何对jquery中的未命名函数执行.call()
- 等待函数执行后再继续
- mootools类型的函数将文本作为函数执行
- 停止从另一个函数执行Javascript函数
- Jquery回调函数执行多次
- 如何使即兴 jquery 暂停当前函数执行
- JavaScript 双函数执行
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- 函数执行的次数超出预期
- JS中函数执行错误
- 为什么这个函数执行了两次
- 从子函数执行父函数;t更新父级'的属性
- 如何在jQuery函数执行's处于活动状态
- 使用javascript函数执行php文件
- jQuery函数执行顺序
- javascript中同步函数执行中的问题