Javascript 正在尝试提取其中的公共功能
我有下面的方法,我使用reducer在reducer中设置这些字典“EarliesTopionByInitialRevision”和“latestOptionByInitialRevision”,代码如下所示Javascript 正在尝试提取其中的公共功能,javascript,reactjs,object,ecmascript-6,refactoring,Javascript,Reactjs,Object,Ecmascript 6,Refactoring,我有下面的方法,我使用reducer在reducer中设置这些字典“EarliesTopionByInitialRevision”和“latestOptionByInitialRevision”,代码如下所示 const lookups = optionsInput?.reduce( (acc, option) => { const [optionById, earliestOptionByInitialRevision, latestOptionByInitialR
const lookups = optionsInput?.reduce(
(acc, option) => {
const [optionById, earliestOptionByInitialRevision, latestOptionByInitialRevision] = acc;
optionById[option.id] = option;
const isCustomProject = option.initialRevisionId === null || option.initialRevisionId === undefined;
if (
isCustomProject ||
!earliestOptionByInitialRevision[option.initialRevisionId] ||
option.revision < earliestOptionByInitialRevision[option.initialRevisionId].revision
) {
// trying to extract the below into common
//function because in below if condition i have used the same and difference is
// "earliestOptionByInitialRevision"
if (isCustomProject) {
option = {...option, initialRevisionId:'customProjectOption'}
if (!earliestOptionByInitialRevision[option.initialRevisionId])
{
earliestOptionByInitialRevision[option.initialRevisionId] = [option];
} else {
earliestOptionByInitialRevision[option.initialRevisionId].push(option);
}
} else {
earliestOptionByInitialRevision[option.initialRevisionId] = option;
}
}
if (
isCustomProject ||
!latestOptionByInitialRevision[option.initialRevisionId] ||
option.revision > latestOptionByInitialRevision[option.initialRevisionId].revision
) {
// the below if condition same as with above and the difference
// is "latestOptionByInitialRevision"
if (isCustomProject) {
option = {...option, initialRevisionId:'customProjectOption'}
if (!latestOptionByInitialRevision[option.initialRevisionId]) {
latestOptionByInitialRevision[option.initialRevisionId] = [option];
} else {
latestOptionByInitialRevision[option.initialRevisionId].push(option);
}
} else {
latestOptionByInitialRevision[option.initialRevisionId] = option;
}
}
return acc;
},
[{}, {}, {}]
) ?? [{}, {}, {}];
const [optionById, earliestOptionByInitialRevision, latestOptionByInitialRevision] = lookups;
非常感谢
更新:
一个快速修复方法是将公共功能提取到一个函数中,由dict(JavaScript对象)参数化
const选项输入=[{
id:1,
修订:2
},
{
id:2,
修订:1
},
];
常量查找=选项输入?减少(
(附件,选项)=>{
const[optionById,EarliesTopionByInitialRevision,latestOptionByInitialRevision]=acc;
optionById[option.id]=选项;
const isCustomProject=option.initialRevisionId==null | | option.initialRevisionId==undefined;
const updateDict=(dict)=>{
if(isCustomProject){
const newOption={…option,initialRevisionId:'customProjectOption'}
如果(!dict[option.initialRevisionId]){
dict[option.initialRevisionId]=[newOption];
}否则{
dict[option.initialRevisionId].push(newOption);
}
}否则{
dict[option.initialRevisionId]=选项;
}
};
如果(是自定义项目| |!EarliesTopionByInitialRevision[option.initialRevisionId]| | option.revisionLateStopByInitialRevision[option.initialRevisionId].revision){
更新指令(latestOptionByInitialRevision);
}
返回acc;
},
[{}, {}, {}]
) ?? [{}, {}, {}];
控制台日志(查找)代码>一个快速修复方法是将公共功能提取到一个由dict(JavaScript对象)参数化的函数中
const选项输入=[{
id:1,
修订:2
},
{
id:2,
修订:1
},
];
常量查找=选项输入?减少(
(附件,选项)=>{
const[optionById,EarliesTopionByInitialRevision,latestOptionByInitialRevision]=acc;
optionById[option.id]=选项;
const isCustomProject=option.initialRevisionId==null | | option.initialRevisionId==undefined;
const updateDict=(dict)=>{
if(isCustomProject){
const newOption={…option,initialRevisionId:'customProjectOption'}
如果(!dict[option.initialRevisionId]){
dict[option.initialRevisionId]=[newOption];
}否则{
dict[option.initialRevisionId].push(newOption);
}
}否则{
dict[option.initialRevisionId]=选项;
}
};
如果(是自定义项目| |!EarliesTopionByInitialRevision[option.initialRevisionId]| | option.revisionLateStopByInitialRevision[option.initialRevisionId].revision){
更新指令(latestOptionByInitialRevision);
}
返回acc;
},
[{}, {}, {}]
) ?? [{}, {}, {}];
控制台日志(查找)代码>很抱歉,在这一行中出现了一个错误,如函数参数赋值option`和dict
,option={…option,initialRevisionId:'customProjectOption'}
和dict[option.initialRevisionId]=[option]
你能告诉我如何克服这个错误吗?但当时我没有收到任何错误,但现在它显示出来了,而且对于dict
也是一样。你能分享一下选项input
是什么样子的吗?我刚刚上传了关于选项输入的图像,以及它的对象列表。我遇到了一个错误类似于函数参数赋值
option`和dict
在这一行option={…option,initialRevisionId:'customProjectOption'}
和dict[option.initialRevisionId]=[option]
您能告诉我如何克服这个错误吗?但当时我没有收到任何错误,但现在它显示出来了,而且对于dict
也是一样。您能分享一下选项输入
的样子吗?我刚刚上传了有关选项输入及其对象列表的图像
if (isCustomProject) {
option = {...option, initialRevisionId:'customProjectOption'}
if (!earliestOptionByInitialRevision[option.initialRevisionId]) {
earliestOptionByInitialRevision[option.initialRevisionId] = [option];
} else {
earliestOptionByInitialRevision[option.initialRevisionId].push(option);
}
} else {
earliestOptionByInitialRevision[option.initialRevisionId] = option;
}