javascript - 返回基于对象键值对的字符串

标签 javascript object formatting

我目前从负载中接收到一个对象,我希望根据该对象内部的值将其基本上格式化为一个字符串。我有一个解决方案,但我不是很喜欢它,并且知道可能有更实用的方法来解决这个问题。

有效负载中返回的对象如下所示

{
  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 作为传递给 some/every 的函数:

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(', ');
}

关于javascript - 返回基于对象键值对的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56992446/

相关文章:

javascript - 使用xtype和Ext.create渲染饼图

javascript - JS 逻辑算法不工作,不进入 else 分支

javascript - 找到选择器并更新

java - 使用对象或适当的数据类型

java - 从数据库中获取对象列表

循环内的 PHPExcel 条件格式

c# - 如何格式化 DateTime 或 TimeZone/TimeZoneInfo 以显示三个字母?

javascript - Chrome jQuery AJAX 失败,不是跨域问题

matlab - 如何找到自己的类创建的对象?

google-sheets - 计算持续时间并以分钟和秒表示