Javascript 正在尝试提取其中的公共功能

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

我有下面的方法,我使用reducer在reducer中设置这些字典“EarliesTopionByInitialRevision”和“latestOptionByInitialRevision”,代码如下所示

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