javascript - 根据对象键值对返回字符串
问题描述
我目前从有效负载接收一个对象,我希望根据该对象内部的值将其格式化为字符串。我有一个解决方案,但我并不是它的忠实粉丝,我知道可能有更实用的方法来解决这个问题。
有效载荷中返回的对象如下所示
{
sundayUsage: false,
mondayUsage: true,
tuesdayUsage: false,
wednesdayUsage: true,
thursdayUsage: true,
fridayUsage: true,
saturdayUsage: false
}
基于这些值,我希望能够显示不同的字符串。
这是我目前的解决方案
function formatSchedule(schedule) {
let days = []
let convertedSchedule = Object.keys(schedule).map(x => ({
available: schedule[x],
label: x.slice(0, 3).replace(/^[^ ]/g, match => match.toUpperCase())
}))
convertedSchedule.map(x => {
if (x.available) {
days.push(x.label)
}
return days
})
if (
days.includes('Mon' && 'Tue' && 'Wed' && 'Thu' && 'Fri' && 'Sat' && 'Sun')
) {
return 'Everyday'
} else if (
days.includes('Mon' && 'Tue' && 'Wed' && 'Thu' && 'Fri') &&
!days.includes('Sat' && 'Sun')
) {
return 'Weekdays (Mon-Fri)'
} else if (
days.includes('Sat' && 'Sun') &&
!days.includes('Mon' && 'Tue' && 'Wed' && 'Thu' && 'Fri')
) {
return 'Weekends (Sat-Sun)'
} else return days.join(', ')
}
我不觉得引入外部库是必要的,但如果它最终成为适合这项工作的工具,我愿意接受建议。
解决方案
略有不同的方法,使用Boolean
作为传递给一些/每个的函数:
function formatSchedule(schedule) {
const days = Object.values(schedule);
const weekdays = days.slice(0, 5);
const weekend = days.slice(-2);
if (days.every(Boolean)) return 'Everyday';
else if (weekdays.every(Boolean) && !weekend.some(Boolean)) return 'Weekdays (Mon-Fri)'
else if (weekend.every(Boolean) && !weekdays.some(Boolean)) return 'Weekends (Sat-Sun)'
else return Object.entries(schedule)
.filter(v => v[1])
.map(v => v[0][0].toUpperCase() + v[0].slice(1, 3))
.join(', ');
}
推荐阅读
- python - 如何使 import os 命令在 python 脚本中工作
- python - 如何在python中从numpy数组创建png图像文件对象而不保存到磁盘(用于http请求)
- r - 当我不使用 gsub 函数时,R 中的 recode 函数出现奇怪的 gsub 错误
- php - 应用程序架构 - 何时为对象的属性值使用单独的类?
- android - 水平回收器视图会切断文本,因为它为所有列表项保持相同的高度
- python - 从字典中迭代值时出现类型错误
- php - 模型 Codeigniter 中的非法字符串偏移
- javascript - 标记坐标不正确传单
- reporting-services - Web 报表查看器中显示大紫线
- pandas - 使用 np.random 跳转分布