当前位置: 首页 > article >正文

js按日期按数量进行倒序排序,然后再新增一个字段,给这个字段赋值 10 到1

效果如下图:

实现思路:

  1. 汇总数据:使用 reduce 方法遍历原始数据数组,将相同日期的数据进行合并,并计算每个日期的总和。
  2. 创建日期映射:创建一个映射 dateMap,存储每个日期的对象列表。
  3. 排序并添加排序字段:遍历 dateMap 中的每个日期列表,按照 value 降序排序,并为每个对象添加一个 rank 字段,表示该对象在相同日期中的排序值。

运行这段代码后,原始的 data 数组中的每个对象都会有一个 rank 字段,表示该对象在相同日期中的排序位置。

代码:

let data = [
  { date: '2023-01-01', value: 2 },
  { date: '2023-01-02', value: 1 },
  { date: '2023-01-01', value: 3 },
  { date: '2023-01-02', value: 5 },
  { date: '2023-01-01', value: 6 },
  { date: '2023-01-01', value: 9 },
  { date: '2023-01-02', value: 7 },
];

// Step 1: 使用 reduce 方法汇总数据
const summarizedData = data.reduce((prev, cur) => {
  const index = prev.findIndex(item => item.date === cur.date);
  if (index !== -1) {
    prev[index].value += cur.value;
  } else {
    prev.push({ ...cur });
  }
  return prev;
}, []);

// Step 2: 创建一个映射,存储每个日期的对象列表
const dateMap = {};
data.forEach(item => {
  if (!dateMap[item.date]) {
    dateMap[item.date] = [];
  }
  dateMap[item.date].push(item);
});

// Step 3: 为每个原始数据对象添加排序字段
Object.keys(dateMap).forEach(date => {
  dateMap[date].sort((a, b) => b.value - a.value); // 按照 value 降序排序
  dateMap[date].forEach((item, index) => {
    item.rank = index + 1; // 添加 rank 字段
  });
});

console.log(data);

本页实现代码(备忘,自用):

 const result = await queryListRptSmokeDay({ ...where, page, limit });

  if (result.length > 0) {
    const summarizedData = result.reduce((prev, cur) => {
      const index = prev.findIndex((item) => item.statisticsDate === cur.statisticsDate);
      if (index !== -1) {
        prev[index].statisticsCount += cur.statisticsCount;
      } else {
        prev.push({ ...cur });
      }
      return prev;
    }, []);

    // Step 2: 创建一个映射,存储每个日期的对象列表
    const dateMap = {};
    result.forEach((item) => {
      if (!dateMap[item.statisticsDate]) {
        dateMap[item.statisticsDate] = [];
      }
      dateMap[item.statisticsDate].push(item);
    });

    // Step 3: 为每个原始数据对象添加排序字段
    Object.keys(dateMap).forEach((statisticsDate) => {
      dateMap[statisticsDate].sort((a, b) => a.statisticsCount - b.statisticsCount); // 按照 value 降序排序
      dateMap[statisticsDate].forEach((item, index) => {
        item.rank = index + 1; // 添加 rank 字段
      });
    });
    result.sort((a, b) => {
      if (a.statisticsDate !== b.statisticsDate) {
        return b.statisticsDate.localeCompare(a.statisticsDate); // 降序日期
      } else {
        return b.rank - a.rank; // 降序数量
      }
    });
    console.log(result, 666666);
    return result;
  } else {
    return [];
  }


http://www.kler.cn/a/464659.html

相关文章:

  • 【机器学习:二、线性回归模型】
  • Elasticsearch: 高级搜索
  • 在Ubuntu 18.04.6 LTS安装OpenFace流程
  • Redission红锁
  • 从摩托罗拉手机打印短信的简单方法
  • 【数据仓库金典面试题】—— 包含详细解答
  • Lua迭代器如何使用?
  • element ui 组件 时间选择器出现转换问题的解决办法
  • 【门铃工作原理】2021-12-25
  • scipy和statsmodels之Python实现
  • Unity网络通信相关
  • 算命网站源码PHP框架_附2025新版设计书教程
  • Linux系统编程:深入理解计算机软硬件体系和架构
  • 前端页面上传文件:解决 ERR_UPLOAD_FILE_CHANGED
  • 基于Python flask 的微博高校舆情分析系统,高校微博情感分析大屏可视化
  • sql优化(1)
  • 优化现金流:CRM回款自动化的关键步骤
  • C++软件设计模式之状态模式
  • H3C Tftp 备份与恢复配置文件
  • C语言中的printf、sprintf、snprintf、vsnprintf 函数
  • 在K8S中,如果Pod处于不健康状态如何排查?
  • Azure Airflow 中配置错误可能会使整个集群受到攻击
  • NextCloud服务安装与配置教程
  • 课程思政元素收集系统|Java|SSM|JSP|
  • Lianwei 安全周报|2025.1.2
  • Junit4单元测试快速上手