程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了我想根据我的结果制作自定义对象数组 我得到的结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决我想根据我的结果制作自定义对象数组 我得到的结果?

开发过程中遇到我想根据我的结果制作自定义对象数组 我得到的结果的问题如何解决?下面主要结合日常开发的经验,给出你关于我想根据我的结果制作自定义对象数组 我得到的结果的解决方法建议,希望对你解决我想根据我的结果制作自定义对象数组 我得到的结果有所启发或帮助;

基本上我知道数组,它是原型方法, 我试通过使用 new Set()、map 和 filter 来获得结果。 但不知何故,我在某个时候卡住了以获得想要的结果。

以下是有关问题的详细信息以及我想要的结果。

我得到的结果

let arr = [
  {
    Date: "2021-05-01",Status: "incomplete",},{
    Date: "2021-05-07",{
    Date: "2021-05-31",Status: "Complete",];

我想像下面这样转换这个结果, 注意:基于日期。

finalResult = [
  {
    Date: "2021-05-01",Incompleted: 1,Completed: 0,@R_294_10586@l: 1,Completed: 1,@R_294_10586@l: 2,];

感谢您的贡献

解决方法

您可以结合使用 Set 和 @H_314_9@map 函数来做到这一点。首先,您必须从数组中提取唯一日期。我们可以使用 @H_314_9@map 过滤掉日期,然后使用 Set 只保留唯一值。从此处了解有关集合的更多信息:JavaScript Set

const dates = [...new Set(arr.map(a => a.DatE))]

现在我们的 dates 数组中有唯一的三个日期,我们可以轻松地遍历每个日期并计算下一个日期的 completeincomplete 任务。

const final = dates.map(date => {
    const incomplete = arr.filter(a => a.Date == date && a.Status == "incomplete").length
    const complete = arr.filter(a => a.Date == date && a.Status == "Complete").length

    return {
        Date: date,Incompleted: incomplete,Completed: complete,@R_294_10586@l: complete + incomplete
    }
})

最后:-

let arr = [
    {
        Date: "2021-05-01",Status: "incomplete",},{
        Date: "2021-05-07",{
        Date: "2021-05-31",Status: "Complete",];

const dates = [...new Set(arr.map( a => a.Date ))]
const final = dates.map( date => {
    const incomplete = arr.filter(a => a.Date == date && a.Status == "incomplete").length
    const complete = arr.filter(a => a.Date == date && a.Status == "Complete").length

    return {
        Date: date,@R_294_10586@l: complete + incomplete
    }
})

console.log(final)

,

您可以使用数组 reduce 函数来解决您的问题。它只遍历数组一次。我们创建一个以日期为键的新对象。如果对象中尚不存在日期,则会为其创建一个新的空条目。然后它将现有条目与当前元素合并。

最后,我们需要使用 Object.values 再次将其转换为数组。

const uniqueDates = arr.reduce((acc,cur) => {
  const exisTing = acc[cur.date] ?? createEmpty(cur);
  return {...acc,[cur.date]: merge(exisTing,cur) }
},{})

const finalResult = Object.values(uniqueDates);

function createEmpty({ date }) {
  return { date,incompleted: 0,completed: 0,@R_294_10586@l: 0 }
}

function merge(exisTing,{ status }) {
  return {
    ...exisTing,incompleted: exisTing.incompleted + status === 'incomplete',completed: exisTing.completed + status === 'Complete',@R_294_10586@l: exisTing.@R_294_10586@l + 1
  }
}
,

您可以为任意数量的 status 设置动态。

  • 创建一个 Setstatus 以获取所有唯一状态
  • 创建一个部分对象,所有状态为键,0 为值。有很多方法可以创建它。我正在使用 Object.fromEntries。它看起来像这样{ "incomplete": 0,"Complete": 0 }
  • 遍历数组。使用一个 group 对象,其中每个 Date 作为键和输出中所需的对象作为其值。

const arr = [{Date:"2021-05-01",Status:"incomplete",{Date:"2021-05-07",{Date:"2021-05-31",Status:"Complete",}],unique = new Set(arr.map(a => a.Status)),initial = Object.fromEntries( Array.from(unique,s => [s,0]) ),group = { }

for (const { Date,Status } of arr) {
  group[Date] ||= { Date,...initial,@R_294_10586@l: 0 };
  group[Date][Status]++;
  group[Date].@R_294_10586@l++
}

const output = Object.values(group)

console.log( output )

,

你可以简单地使用 forEach 循环......

let arr = [
  {
    Date: "2021-05-01",{
    Date: "2021-05-07",{
    Date: "2021-05-31",Status: "incompleted",]

let finalResult = []

const getDateEntryIndex = (datE) => {
  let index = undefined

  finalResult.forEach((element,i) => {
    if(element.Date == datE) {
      index = i
    }
  })

  return index
}

arr.forEach(element => {
  let index = getDateEntryIndex(element.DatE)
  if(indeX) {
    if(element.Status == "Complete") {
      finalresult[index].Completed++
    } else {
      finalresult[index].Incompleted++
    }

    finalresult[index].@R_294_10586@l++
  } else {
    finalResult.push({
      Date: element.Date,Incompleted: element.Status == "incompleted" ? 1 : 0,Completed: element.Status == "Complete" ? 1 : 0,@R_294_10586@l: 1
    })
  }
})

console.log(finalResult)

大佬总结

以上是大佬教程为你收集整理的我想根据我的结果制作自定义对象数组 我得到的结果全部内容,希望文章能够帮你解决我想根据我的结果制作自定义对象数组 我得到的结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。