【发布时间】:2018-04-21 20:12:52
【问题描述】:
我正在使用以下内容。
const employeesByDepartment = {};
employeesArray.forEach((employee) => {
if (!(employeesByDepartment[employee.department])) {
employeesByDepartment[employee.department] = {};
employeesByDepartment[employee.department].managers = [];
employeesByDepartment[employee.department].members = [];
}
let thisManagerAlreadyAdded = false;
// PROBLEM ON NEXT LINE
employeesByDepartment[employee.department].managers.forEach((manager) => {
if (manager.id === employee.manager) {
thisManagerAlreadyAdded = true;
}
});
if (thisManagerAlreadyAdded === false) {
employeesByDepartment[employee.department].managers
.push(ReturnOneUser(employee.manager));
}
});
问题:没有发现管理器在数组中,所以它们都被添加了。也就是说,永远不会到达这个块内的表达式。
employeesByDepartment[employee.department].managers.forEach((manager)
在我的测试中,该数组始终具有 length 或 0。因此,我假设 JS 解释器 (Node.js) 不会在每次执行 forEach 时重新检查数组。到目前为止,我还尝试了数组 indexOf 方法和 for 循环,但在数组中没有找到任何管理器。
那么,如何添加一个未找到的管理器,然后为下一个管理器重新评估该数组?
【问题讨论】:
-
你能添加一个虚拟的employeesArray吗?
-
foreach不是有效的 Javascript 数组函数。大小写很重要。 -
@CertainPerformance,是的,当然。谢谢你。已更新示例以包含您的更正。
-
@Md.AbuTaher,这不是将问题转移到另一个数组吗?
-
我很确定我已经多次解决了这个完全相同的问题。让我添加一个答案。
标签: javascript arrays ecmascript-6 iteration