javascript - 从 for 循环中的函数回调返回值
问题描述
我有以下for循环:
import { createSelector } from 'reselect';
let dirtyForm;
export const isFormDirty = createSelector(
getForms,
getState,
(forms, state) => {
for(let i = 0; i < forms.length; i += 1){
dirtyForm = isDirty(forms[i])(state);
}
return dirtyForm;
}
);
isDirty from 从表单数组中获取单个表单名称并检查表单是否已被编辑。我循环浏览表单名称的原因是要找出屏幕上可用的表单是否已被编辑。
它可以工作,但在这种情况下有没有办法根本不必使用 for 循环?
解决方案
最后一个表单的状态将始终覆盖循环中的其他表单。
如果您尝试检测任何一种表格是否脏,您可以使用Array.prototype.some()
:
export const isFormDirty = createSelector(
getForms,
getState,
(forms, state) => forms.some(form => isDirty(form)(state)) // Will return true if one of the forms are dirty, false if all forms are clean
);
或者,正如@Danmoreng 在评论中所建议的那样,您可以保留循环,并通过将dirtyForm 标志与自身添加OR'ing 来防止覆盖:
for (let i = 0; i < forms.length; i += 1) {
// Once true, further results will not be evaluated, so no overrides
dirtyForm = dirtyForm || isDirty(forms[i])(state);
}
或者,正如@Icepickle 在评论中建议的那样,一旦遇到脏表格,您就可以简单地打破循环:
for (let i = 0; i < forms.length; i += 1) {
// Exit the loop by returning true if a form is dirty
// Might be wise to add a "return false;" outside the loop with this approach.
if(isDirty(forms[i])(state)) {
return true;
}
}
推荐阅读
- c# - 添加新路径文件夹时如何在路径中维护环境变量
- powershell - Get-AppXPackage/Add-AppxPackage 在手动运行时有效,但在脚本内的函数中无效
- flutter - 在颤振中嵌套脚手架以实现滑块
- python - 优化大型 XML 文件的 iterparse 代码
- apache-spark - 应用 PySpark dropDuplicates 方法会打乱数据框的排序
- sql - SQL中的直接关系
- python - NameError:没有为 IMDP API TSV 文件定义名称“__file__”
- python - 根据条件使用 Pandas 迭代数据帧行并保存为新表
- c# - 如何在 WPF 上使用 tweetinvi c# 显示主时间线
- parsing - 空格敏感语言如何处理换行符?