嗨,我只关注了code

    [
      {service: { name: "Home" },status: "Generated", feeCharged:{id:1,fee:2},
      {service: { name: " Photography" },status: "requested",feeCharged:{id:2,fee:24}},
      {service: { name: "Electrical" },status: "requested",feeCharged:{id:6,fee:42}},
      {service: { name: "Electrical" },status: "Completed",feeCharged:{id:66,fee:23} },
      {service: { name: " Photography" },status: "Completed",feeCharged:{id:78,fee:11}},
      {service: { name: "Home" },status: "Generated",feeCharged:{id:45,fee:234}},
      {service: { name: "Electrical" }, status: "requested",feeCharged:{id:77,fee:3} },
      {service: { name: "Electrical" }, status: "requested",feeCharged:{id:4,fee:33} }
    ]

现在,我正在try 按service.namestatus再加上count来筛选新数组中的数据.

最终结果应该是:

    [
      { name: "Home", status: "Generated", count: 2 },
      { name: "Photography", status: "requested", count: 1 },
      { name: "Photography", status: "Completed", count: 1 },
      { name: "Electrical", status: "requested", count: 3 },
      { name: "Electrical", status: "Completed", count: 1 }
    ]

所以,正如你在我的最终结果中看到的,如果有相同的service.namestatus,我将它们合并到一个对象中,并设置计数.

对于过滤,我try 了这个,但它并不像我预期的那样工作:

   let answer = [];

    data.forEach((x) => {
    if (!answer.some((y) => y.name === x.service.name)) {
      let newAnswer = {};
      newAnswer.name = x.service.name;
      newAnswer.value = 1;
      answer.push(newAnswer);
    } else {
      let existAnswer = answer.find((y) => y.name === x.service.name);
      existAnswer.value++;
    }
    });

请帮助我实现这个结果,谢谢.

推荐答案

也许这会对你有帮助?

const data = [{ service: { name: "Home" }, status: "Generated", feeCharged: { id: 1, fee: 2 }},{ service: { name: " Photography" }, status: "requested", feeCharged: { id: 2, fee: 24 } }, { service: { name: "Electrical" }, status: "requested", feeCharged: { id: 6, fee: 42 } }, { service: { name: "Electrical" }, status: "Completed", feeCharged: { id: 66, fee: 23 } }, { service: { name: " Photography" }, status: "Completed", feeCharged: { id: 78, fee: 11 } }, { service: { name: "Home" }, status: "Generated", feeCharged: { id: 45, fee: 234 } }, { service: { name: "Electrical" }, status: "requested", feeCharged: { id: 77, fee: 3 } }, { service: { name: "Electrical" }, status: "requested", feeCharged: { id: 4, fee: 33 } }];


const res = Object.entries(data.reduce((a, e, nam) => { // get counts of name/status combinations
  nam = e.service.name + "|" + e.status;
  a[nam] = (a[nam] ?? 0) + 1;
  return a;
}, {})).map(([k, n], t) =>{  // separate name/status key values again ... 
  t = k.split("|");
  return {name: t[0],status: t[1],count: n};
})

console.log(res)

(当前实现使用|作为名称和状态值之间的分隔符.因此,如果名称或状态值包含此字符,则它将失败.)

Javascript相关问答推荐

如何避免移动设备中出现虚假调整大小事件?

Redux工具包查询(RTKQ)端点无效并重新验证多次触发

GrapeJS -如何保存和加载自定义页面

如何在Obsidian dataview中创建进度条

当Redux提供程序访问Reduxstore 时,可以安全地从Redux提供程序外部调用钩子?

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

如何将Cookie从服务器发送到用户浏览器

优化Google Sheet脚本以将下拉菜单和公式添加到多行

PDF工具包阿拉伯字体的反转数字

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

更新动态数据中对象或数组中的所有值字符串

连接到游戏的玩家不会在浏览器在线游戏中呈现

Puppeteer上每页的useProxy返回的不是函数/构造函数

有效路径同时显示有效路径组件和不存在的路径组件

将嵌套数组的元素乘以其深度,输出一个和

将相关数据组合到两个不同的数组中

输入的值的类型脚本array.排序()

未找到用于 Select 器的元素:in( puppeteer 师错误)

Rails 7:在不使用导入映射的情况下导入Java脚本

如何在单击链接时设置一个JavaScript变量(以打开弹出窗口的特定部分)