SOURCE

console 命令行工具 X clear

                    
>
console
function processMonthlyData(data, conditions) {
   // 初始化1-12个月的数据模板
    const months = _.range(1, 13).map(month => ({
        key: `date${month < 10 ? '0' + month : month}`,
        date: month < 10 ? '0' + month : month,
        numKey: `date${month < 10 ? '0' + month : month }-num`
    }));

    // 按月份索引数据
    const dataByMonth = _.keyBy(data, 'startTime');

    // 处理每个条件
    return conditions.map(condition => {
        const [categoryName, field] = _.toPairs(condition)[0];

        // 为每个月创建数据
        const monthData = {};
        months.forEach(({ key, date, numKey }) => {
            monthData[key] = date;
            monthData[numKey] = 0; // 默认0,后续填充真实数据
        });
        
        // 填充实际数据
        Object.entries(dataByMonth).forEach(([month, items]) => {
            const monthValue = dayjs(month).format('MM');
            const monthKey = `date${monthValue}`;
            const numKey = `${monthKey}-num`;
            const value = _.get(items, field, 0);
            monthData[numKey] = value;
        });


        console.log('months:', months);
        console.log('monthData:', monthData);
        // 计算平均值
        const values = months.map(({ numKey }) => {
            const val = monthData[numKey];
            return val !== 0 && val !== "" ? parseFloat(val) || 0 : 0;
        });
        const avgValueResult = _.round(_.sum(values) / 12, 2); // 直接计算12个月的平均值


        // 计算平均值
        monthData.avg = avgValueResult;

        monthData.complaintCateName = categoryName;

        return monthData;
    });
}

// 使用示例
const data = [
    { "startTime": "2025-02", "electricalHandleTime": 2.38, "machineryHandleTime": 2.36, "nonstandardHandleTime": 0, "totalHandleTime": 2.51, "electricalRate": 0.78, "machineryRate": 0.17, "nonstandardRate": 0, "weightingArithmeticMean": 2.2576 },
    { "startTime": "2025-01", "electricalHandleTime": 3.62, "machineryHandleTime": 7.19, "nonstandardHandleTime": 0, "totalHandleTime": 4.51, "electricalRate": 0.69, "machineryRate": 0.28, "nonstandardRate": 0, "weightingArithmeticMean": 4.511 },
    { "startTime": "2025-03", "electricalHandleTime": 3.02, "machineryHandleTime": 6.26, "nonstandardHandleTime": 0, "totalHandleTime": 4.64, "electricalRate": 0.52, "machineryRate": 0.41, "nonstandardRate": 0, "weightingArithmeticMean": 4.137 },
    { "startTime": "2025-04", "electricalHandleTime": 3, "machineryHandleTime": 4.84, "nonstandardHandleTime": 0, "totalHandleTime": 4.15, "electricalRate": 0.41, "machineryRate": 0.54, "nonstandardRate": 0, "weightingArithmeticMean": 3.8436 },
    { "startTime": "2025-05", "electricalHandleTime": 2.19, "machineryHandleTime": 1.78, "nonstandardHandleTime": 0, "totalHandleTime": 1.96, "electricalRate": 0.55, "machineryRate": 0.4, "nonstandardRate": 0, "weightingArithmeticMean": 1.9165 }
];

const conditions = [
    { '标准电气件/天': 'electricalHandleTime' },
    { '标准机械件/天': 'machineryHandleTime' },
    { '非标件/天': 'nonstandardHandleTime' },
    { '处理周期/天(加权算术平均)': 'weightingArithmeticMean' },
    { '处理周期/天(算术平均)': 'totalHandleTime' }
];

const result = processMonthlyData(data, conditions);
console.log(result);
<script src="https://unpkg.com/lodash@4.17.21"></script>
<script src="https://unpkg.com/dayjs@1.11.13"></script>