@SpeakeazyYT1

Почему не работает вывод максимального значения массива?

Имеется следующий код:

$('#year').on('change', function() {
        $('#result').html('');
            a = [];
        var maxleng = getMax(a, "UF_LENGTH");
        $.getJSON("api.php", {
                action: "getAkb"
            })
            .done(function(data) {
                $.each(data, function(i, item) {
                    if (item.UF_TYPE == 'A') a.push(item);
                });
                if (a.length > 0) {
                    result += '<h4>Europe</h4>';
                  
                    console.log("Наибольшая длина: " + maxleng.UF_LENGTH);
                  
                    $.each(a, function(i, item) {
                        result += item.UF_LENGTH + ' x ' + item.UF_WIDTH + ' x ' + item.UF_HEIGHT + ' ' + item.UF_CAPACITY + 'Ah ' + item.UF_CAPACITY + 'EN V' + '<br>';
                    });
                }
                $('#result').html(result);
            });
    });

Всё что должно интересовать - это переменная maxleng, которая занимается выводом максимального значения по ключу UF_LENGTH в массиве "a".

Функция getMax:

function getMax(arr, prop) {
    var max;
    for (var i=0 ; i<arr.length ; i++) {
        if (!max || parseInt(arr[i][prop]) > parseInt(max[prop]))
            max = arr[i];
    }
    return max;
}

В .done(function(data) я поставил console.log("Наибольшая длина: " + maxleng.UF_LENGTH); чтобы вывести максимальное значение по ключу json из массива "a".
Возникла проблема, когда я попробовал исполнить свой скрипт, в консоли вылезла ошибка: Uncaught TypeError: Cannot read property 'UF_LENGTH' of undefined.
Что я сделал в коде не так?

Массив данных примерно такой:

[
  {"UF_LENGTH":"1"},
  {"UF_LENGTH":"2"},
  {"UF_LENGTH":"3"}
]
  • Вопрос задан
  • 135 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Так вы значение переменной maxleng вычислили когда массив был пустой. Естественно, вернулось пустое значение, в котором нет поля UF_LENGTH.
К тому же, в ваших данных JSON не определено поле UF_TYPE, значит при фильтрации в массив a ничего не попадёт.
Ответ написан
agmegadeth
@agmegadeth
Веб-разработчик в дизайн студии
У вас переменная maxleng определилась и посчиталась уже в 4-ой строчке. Вам надо вызывать функцию getMax уже с заполненным массивом "a". Т.е. там где вы выводите в консоль надо и считать, а не ДО заполнения массива.

var maxleng = getMax(a, "UF_LENGTH");
console.log("Наибольшая длина: " + maxleng.UF_LENGTH);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект