【问题标题】:Modify array of objects to replace with additional properties if null如果为 null,则修改对象数组以替换为其他属性
【发布时间】:2021-11-05 22:43:13
【问题描述】:

我有一个对象数组如下

let data = [
    {
        vertical_name: "CORE",
        projects: [
            {
                name: "Alpha",
                id: 187,
                current_result: null,
            }
        ]
    },
    {
        vertical_name: "release",
        projects: [
            {
                name: "Beta",
                id: 27,
                current_result: {
                    success_percentage: 37,
                    failure_percentage: 25,
                    skip_percentage: 36
                }
            },
            {
                name: "Charlie",
                id: 47,
                current_result: {
                    success_percentage: 37,
                    failure_percentage: 25,
                    skip_percentage: 36
                }
            }
        ]
    }
  ]

如您所见,current_result 在某处为空。所以我必须修改数据以显示current_result 未经测试。所以在这种情况下,我想显示如下,而不是显示 null。 not_tested 是 100 并且在这种情况下跳过,失败和成功百分比是 0。

current_result: {
  success_percentage: 0,
  failure_percentage: 0,
  skip_percentage: 0,
  not_tested: 100
}

同样在 current_result 的其他值上,因为它不为 null 并且具有 success, failure and skip values,因此 not_tested 应该为 0。

最终结果应该是这样的。有人可以让我知道如何实现这一点,因为我得出一个明确的答案有点复杂

result = [
    {
        vertical_name: "CORE",
        projects: [
            {
                name: "Alpha",
                id: 187,
                current_result: {
                    success_percentage: 0,
                    failure_percentage: 0,
                    skip_percentage: 0,
                    not_tested: 100
                }
            }
        ]
    },
    {
        vertical_name: "release",
        projects: [
            {
                name: "Beta",
                id: 27,
                current_result: {
                    success_percentage: 37,
                    failure_percentage: 25,
                    skip_percentage: 36,
                    not_tested: 0
                }
            },
            {
                name: "Charlie",
                id: 47,
                current_result: {
                    success_percentage: 37,
                    failure_percentage: 25,
                    skip_percentage: 36,
                    not_tested: 0
                }
            }
        ]
    }
  ]

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: javascript arrays reactjs loops object


【解决方案1】:

您可以过滤掉您的结果数据并分配一个默认值。

const result = data.map((item) => {
          const projects = item.projects.map((project) => {
            if (!project?.current_result) {
              return {
                ...project,
                current_result: {
                  success_percentage: 0,
                  failure_percentage: 0,
                  skip_percentage: 0,
                  not_tested: 100,
                },
              };
            } else {
              return project;
            }
          });

     console.log(result)

【讨论】:

    【解决方案2】:

    let data = [{vertical_name: "CORE",projects: [{name: "Alpha",id: 187, current_result: null,}]},{vertical_name: "release", projects: [{               name: "Beta", id: 27, current_result: {                    success_percentage: 37, failure_percentage: 25,                 skip_percentage: 36}},{name: "Charlie", id: 47, current_result: {                     success_percentage: 37, failure_percentage: 25,                    skip_percentage: 36}}]}]  
    
    const newData = data.map((element)=>{
      return element.projects.map((project)=>{
           if(project.current_result === null){
             return {...project, current_result: {success_percentage: 0,
                                                  failure_percentage: 0,
                                                  skip_percentage: 0,
                                                  not_tested: 100
                                                 }
                   }
          }
          return {...project, current_result: {...project.current_result, not_tested: 0} }
    }) 
    })
    
    console.log(newData)

    你可以试试这个代码:

      data.map((element)=>{
      element.projects.map((project)=>{
           if(project.current_result === null){
             return {...project, current_result: {success_percentage: 0,
                                                  failure_percentage: 0,
                                                  skip_percentage: 0,
                                                  not_tested: 100
                                                 }
                   }
          }
          return {...project, current_result: {...project.current_result, not_tested: 0} }
    }) 
    })
    

    【讨论】:

      【解决方案3】:

      使用Array#map而不改变原始数据

      const data = [{"vertical_name":"CORE","projects":[{"name":"Alpha","id":187,"current_result":null}]},{"vertical_name":"release","projects":[{"name":"Beta","id":27,"current_result":{"success_percentage":37,"failure_percentage":25,"skip_percentage":36}},{"name":"Charlie","id":47,"current_result":{"success_percentage":37,"failure_percentage":25,"skip_percentage":36}}]}];
      
      const formatted = data.map(item => Object.assign(item, {
        projects: item.projects.map(project => {
          if (project.current_result === null) {
            project.current_result = {
              success_percentage: 0,
              failure_percentage: 0,
              skip_percentage: 0,
              not_tested: 100
            };
          } else project.current_result.not_tested = 0;
      
          return project;
        })
      }));
      
      console.log(formatted);

      【讨论】:

        【解决方案4】:

        您可以循环进入data 的projects 数组并以这种方式插入您想要的键:

        let data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: null, } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } }, { name: "Charlie", id: 47, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } } ] } ]
          
          data.forEach(dat => {
             dat.projects.forEach(prj => {
                 if (!prj.current_result) {
                    prj.current_result = {
                        success_percentage: 0,
                        failure_percentage: 0,
                        skip_percentage: 0,
                        not_tested: 100
                    };
                 }
                 else {
                    prj.current_result.not_tested = 0;
                 }
             })
          })
          
          console.log(data)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-26
          • 1970-01-01
          • 2021-11-25
          相关资源
          最近更新 更多