【问题标题】:Data formatting of array in javascriptjavascript中数组的数据格式化
【发布时间】:2023-02-21 15:33:38
【问题描述】:

我有一个像下面这样的数组 -

const arr = [{
    name: 'Benefits',
    coverage: [{
      name: "item_one",
      interest: [{
        name: "interest_one",
        limit: [{
          value: 2000
        }]
      }],
      limit: [{
        value: "Y"
      }]
    }]
  },
  {
    name: 'Benefits',
    coverage: [{
      name: "item_two",
      interest: [{
        name: "interest_two",
        limit: [{
          value: 5000
        }]
      }],
      limit: [{
        value: "Y"
      }]
    }]
  }
]

我需要在前端显示好处。但问题是当我通过这个数组进行映射时,好处会打印两次。我知道有两个对象,这就是它打印两次的原因。

所以我决定将此数组转换为如下所示

const arr2 = [{
  name: 'Benefits',
  oneCoverage: [{
    name: "item_one",
    interest: [{
      name: "interest_one",
      limit: [{
        value: 2000
      }]
    }],
    oneLimit: [{
      value: "Y"
    }]
  }],
  twoCoverage: [{
    name: "item_two",
    interest: [{
      name: "interest_two",
      limit: [{
        value: 5000
      }]
    }],
    limit: [{
      value: "Y"
    }]
  }]
}]

但是没有成功获取上述数据。

我想将 arr 转换为 arr2 格式。

我怎样才能做到这一点。

提前致谢

【问题讨论】:

    标签: javascript arrays ecmascript-6


    【解决方案1】:

    你是这个意思吗?

    const arr2 = [{
      name: 'Benefits', // or arr[0].name
      oneCoverage: arr[0].coverage,
      twoCoverage: arr[1].coverage,
    }]
    

    如果你需要深度克隆,你可以使用:

    const arr2 = [{
      name: 'Benefits', // or arr[0].name
      oneCoverage: structuredClone(arr[0].coverage),
      twoCoverage: structuredClone(arr[1].coverage),
    }]
    

    【讨论】:

      【解决方案2】:

      一种方法使用reduce。我将此视为分组问题,我按 name 分组。但在这里我不得不假设每个coverage 都是一个包含 1 个元素的数组。
      也许您一直坚持创建诸如 oneCoverage 之类的密钥名称。 这可以由${coverage[0].name.split("_")[1]}Coverage处理

      最后,我使用 Object.values 获取值数组

      const arr = [{    name: 'Benefits',    coverage: [{      name: "item_one",      interest: [{        name: "interest_one",        limit: [{          value: 2000        }]      }],      limit: [{        value: "Y"      }]}]  },  {    name: 'Benefits',    coverage: [{      name: "item_two",      interest: [{        name: "interest_two",        limit: [{          value: 5000        }]      }],      limit: [{        value: "Y"      }]    }]  }]
      
      const res = Object.values(arr.reduce((acc,{name,coverage}) => {
        acc[name] ??= {name}
        const keyName = `${coverage[0].name.split("_")[1]}Coverage`
        acc[name][keyName] = coverage
        return acc
      }, {}))
      
      console.log(res)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多