如何提取对象数组的time字段并统计各时间值的出现频次
JavaScript时段预约频次统计实现
实现逻辑
你可以通过Array.map提取time字段,再用Array.reduce完成频次统计,两步即可完成需求,针对你示例中的脏数据(第三个对象time字段带多余]),代码中也加了可选的清洗逻辑:
const form = [ // 这里放你原始的form数组 { "_id": "61436aa8deef0390dcfdea79", "time": "8am", // 其他字段省略 }, { "_id": "61436ab8deef0390dcfdea7a", "time": "8am", // 其他字段省略 }, { "_id": "61436b1894116c90f82170b9", "time": "9am]", // 其他字段省略 } ] // 1. 提取所有time字段,同时清洗脏数据(不需要清洗可以删掉.replace部分) const timeList = form.map(item => item.time.replace(/[^a-zA-Z0-9]/g, '')) // 2. 统计各时段出现频次 const timeCount = timeList.reduce((result, currentTime) => { result[currentTime] = (result[currentTime] || 0) + 1 return result }, {}) // 按你需要的格式输出结果 for (const [time, count] of Object.entries(timeCount)) { console.log(`${time} = ${count}`) }
输出效果
针对你提供的示例数据,上述代码输出如下:
8am = 2 9am = 1
后续使用
你可以直接通过timeCount.时间段的方式获取对应时段的预约人数,用来做条件判断,比如:
// 判断8am时段预约人数是否超过3人 if (timeCount['8am'] >= 3) { alert('8am时段预约已满,请选择其他时段') }
内容的提问来源于stack exchange,提问作者longtech
相关产品推荐
相关产品推荐

