JavaScript соответствует ключу / списку значений дням - PullRequest
0 голосов
/ 03 мая 2019

Я создаю список классов из конечной точки JSON из системы управления классами под названием Jackrabbit.Конечная точка, из которой я извлекаю, - https://app.jackrabbitclass.com/jr3.0/Openings/OpeningsJSON?orgID=537284 (включая мой примерный список классов).Из предыдущего вопроса я получил помощь, чтобы поместить это в dynatable.Однако теперь я также пытаюсь отобразить день, в который включен класс, но конечная точка JSON форматирует дни, в которые включен класс, следующим образом: "meeting_days":{"mon":false,"tue":false,"wed":false,"thu":false,"fri":true,"sat":false,"sun":false}.Я пытаюсь преобразовать это так, что если он скажет "mon":true, он будет отображаться как понедельник (или понедельник) в таблице.Если несколько дней соответствуют действительности, я бы хотел перечислить их.

Это мой javascript / html: https://jsfiddle.net/pikles/uqca9df0/28/

function tConvert(time) {
    // Check correct time format and split into components
    time = time.toString().match(/^([01]\d|2[0-3])(:)([0-5]\d)(:[0-5]\d)?$/) || [time];

    if (time.length > 1) { // If time format correct
        time = time.slice(1); // Remove full string match value
        time[5] = +time[0] < 12 ? 'AM' : 'PM'; // Set AM/PM
        time[0] = +time[0] % 12 || 12; // Adjust hours
    }
    return time.join(''); // return adjusted time or original string
}

function dictionaryDay(dictDay) {
    var days = ""
    for (var day in dictDay) {
        if (dictDay.hasOwnProperty(day) === true) {
            days = days + day
        } else {}
    }
    return days
}

$(document).ready(function() {
    $.getJSON("https://app.jackrabbitclass.com/jr3.0/Openings/OpeningsJSON?orgID=537284", function(data) {
        var data_arr = [];
        $.each(data.rows, function(key, data_value) {
            data_arr.push({
                'class': data_value.name,
                'coach': data_value.instructors[0],
                'day': dictionaryDay(data_value.meeting_days),
                'age': data_value.min_age.substr(2, 2) + ' +',
                'openings': data_value.openings.calculated_openings,
                'time': tConvert(data_value.start_time),
                'tuition': data_value.tuition.fee,
            });
        });
        $("#classes").dynatable({
            dataset: {
                records: data_arr
            },
            features: {
                paginate: false,
                recordCount: false,
                search: false
            }
        });
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Dynatable/0.3.1/jquery.dynatable.min.js"></script>
<table id="classes" class="ui celled table">
    <thead>
        <th>Class</th>
        <th>Coach</th>
        <th>Day</th>
        <th>Age</th>
        <th>Openings</th>
        <th>Time</th>
        <th>Tuition</th>
    </thead>
    <tbody>
    </tbody>
</table>

Код, над которым я сейчас работаю, - это dictionaryDay function.

Однако этот список отображается каждый день, когдаэто возвращает дни.Я думал, что это может быть проблема, когда === true должно быть === "true", однако, когда я делаю это - дни не возвращаются.

Кто-нибудь может указать мне правильное направление?

С уважением,
Пиклет

1 Ответ

1 голос
/ 03 мая 2019

Вы используете Object.hasOwnProperty, которые возвращают true, если объект содержит свойство. Он не читает значение, а только ключ, чтобы проверить, существует ли оно в объекте.

Вот ваша функция исправлена:

function dictionaryDay (dictDay) {
  var days = ''
  for (var day in dictDay) {
    // day is the key name ('mon'|'thu'|'wen'...)
    // dictDay['mon'] make reference to the value (true|false)
    if (dictDay[day]) {
      days = days + ' ' + day
    }
  }
 return days
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...