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;
}