Javascript 如何在forEach循环中返回元素
在我的代码中,我有一个数组,如下所示:Javascript 如何在forEach循环中返回元素,javascript,Javascript,在我的代码中,我有一个数组,如下所示: localStroge_Procrastinator_tasks = [object , object, object] 现在,我想使用forEach循环遍历数组,并在对象的id与我提供的id匹配时返回,让我列出代码以使示例更清晰 storeRelevantObj = localStroge_Procrastinator_tasks.forEach(function(e, i){ if (e.task_Id === task_Id) {
localStroge_Procrastinator_tasks = [object , object, object]
现在,我想使用forEach循环遍历数组,并在对象的id与我提供的id匹配时返回,让我列出代码以使示例更清晰
storeRelevantObj = localStroge_Procrastinator_tasks.forEach(function(e, i){
if (e.task_Id === task_Id) {
return e;
}
});
但是,当我运行代码时,即使if条件通过并返回e,storeRelevantObj
仍然为空,为什么?为什么return语句不起作用???使用而不是数组#forEach
使用Array#forEach
,可以初始化空数组,并在满足条件时执行Array#push
使用Array#filter
,返回包含所有通过测试的元素的新数组
var storeRelevantObj=localStroge\u delaystrator\u tasks.filter(函数(e,i){
返回e.task_Id===task_Id;
});
不要使用forEach()
进行过滤,而是使用:
如果您不介意IE支持,您可以使用返回满足条件的第一个元素的方法(因为它可以在第一次匹配时立即返回,所以性能也更高):
此外,如果您的目标是ES6或使用transpiler(如),您的谓词可以使用:
您需要在此处使用筛选函数。因为您想返回一个数组。当前使用的forEach将继续覆盖storeRelevantObj的值 代码:
storeRelevantObj=localStroge\u拖延者\u tasks.filter((e,i)=>{
返回(例如任务Id==任务Id);
});代码>
如果需要使用forEach,应执行以下操作:
localStroge\u拖延者\u任务。forEach((e,i)=>{
如果(如任务Id==任务Id){
商店相关对象推送(e)
};
});
使用Array#filter
,将返回一个新数组。您还可以使用Array#reduce
。
var storeRelevantObj=localStroge\u delayrator\u tasks.reduce(函数(prev,cur){
返回上一个| | cur.task_id==task_id;
},假)代码>
但是,这将只返回第一个匹配的值。虽然filter
将返回一个包含所有匹配值的数组,但以下声明指出,除了抛出异常之外,没有其他方法可以摆脱forEach。它还提到如果你需要这样的行为,你的选择是什么
您还可以通过以下方式使用简单的for循环:
localStroge_Procrastinator_tasks = [object , object, object];
var i, l, match;
l = localStroge_Procrastinator_tasks.length;
for(i=0;!match&&i<l;++i){
match = localStroge_Procrastinator_tasks[i].task_Id === task_Id;
}
localStroge_拖延者_tasks=[object,object,object];
变量i,l,匹配;
l=localStroge\u拖延者\u tasks.length;
对于(i=0;!匹配(&i)
var storeRelevantObj = localStroge_Procrastinator_tasks.find(function(e) {
return e.task_Id === task_Id;
});
var storeRelevantObj = localStroge_Procrastinator_tasks.find(e => e.task_Id === task_Id);
localStroge_Procrastinator_tasks = [object , object, object];
var i, l, match;
l = localStroge_Procrastinator_tasks.length;
for(i=0;!match&&i<l;++i){
match = localStroge_Procrastinator_tasks[i].task_Id === task_Id;
}