【问题标题】:Duplicate code Javascript. how to modularize it重复代码 Javascript。如何模块化
【发布时间】:2020-10-26 13:13:48
【问题描述】:

我在 Sonar 中遇到了一个重复的问题,我无法弄清楚如何纠正它。 这是示例代码。请不要 formFields 传递是在我的项目中维护的不可变状态。因此,如果我执行formFields.getIn(['home', 'value']),在这种情况下,我将尝试获取特定字段home 的值。我将所有值与'true' 进行比较。一旦我比较我将其各自的字符串推入lifeEvents。这些行(3,4 和 5,6)表明我正在复制比较并将数据推送到数组。

1. export const getLifeEvents = formFields => {
2.  const lifeEvents = [];
3.    if(formFields.getIn(['home', 'value']) === 'true')
4.      lifeEvents.push("Buy home");
5.    if(formFields.getIn(['married', 'value']) === 'true')
6.      lifeEvents.push("Getting married");
7.  return lifeEvents;
8. }

为了避免这种重复,我尝试了以下方法

export const getLifeEvents = formFields => {
  const lifeEvents = [];
  const Info = {
    title: ['home', 'married'],
    text: ['Buy home', 'Getting married']
  }

  const data = Info.title.map((e, i) => {
    return { title: e, text: Info.text[i]
  }

  const result = data && data.map(item => {
    if(formFields.getIn([item.title, 'value']) === 'true')
      lifeEvents.push(item.text);
    return lifeEvents;
  });
}

当我这样做时,我总是不确定。有人可以建议吗

【问题讨论】:

    标签: javascript arrays json reactjs object


    【解决方案1】:

    使用键和文本创建一个对象。用 reduce 循环它

    const myEvents = {
      home: 'Buy home',
      married: 'Getting married'
    };
    
    
    export const getLifeEvents = formFields => {
      return Object.entries(myEvents).reduce((lifeEvents, [key, text]) => {
        if (formFields.getIn([key, 'value']) === 'true') {
          lifeEvents.push(text);
        }
        return lifeEvents;
      }, []);
    }
    

    【讨论】:

    • @epascarello-lifeEvents.push("买房");。这并不总是相同的。甚至我推送到数组的字符串对于每个字段都是不同的
    • 只是复制粘贴错误,忘记添加变量
    猜你喜欢
    • 2021-02-05
    • 2014-05-23
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    • 2022-06-10
    相关资源
    最近更新 更多