【发布时间】:2021-12-14 00:45:39
【问题描述】:
我有一个对象 student,它有属性 id、name、groupName。 allStudents 是学生对象的数组,我想把它变成一个id to student map,但是对于每个学生,我想生成一个新的属性“label”,如果学生有groupName,label值是“name + groupName” ,否则为名称。所以我写了下面的代码,它可以工作:
const idsToStudents = allStudents.reduce((tempMap, student) => {
const getStudentLabel = (student) => {
if (student.groupName) {
return [student.name, `(${student.groupName})`].join(' ');
}
return student.name;
};
const studentLabel = getStudentLabel(student);
return {
...tempMap,
[student.id]: { ...student, label: studentLabel}
};
}, {});
我在 reducer 函数中定义了 getStudentLabel 函数,有没有更好的方法来代替在 reducer 函数中一次又一次地声明 getStudentLabel 函数?你可以忽略 getStudentLabel 到底做了什么,只是认为它将每个人作为参数并根据人返回一些东西,有没有办法只定义一次函数,但我仍然可以为减速器中的每个人调用它?
谢谢!
【问题讨论】:
-
为什么不把
getStudentLabel移出reducer呢?我不明白为什么它在里面而你不希望它在里面。那么..它存在的确切原因是什么?
标签: javascript arrays function object reducers