Как этот результат запроса SQL обрабатывается этим кодом JavaScript? - PullRequest
0 голосов
/ 09 октября 2018

Вот функция:

function maxBatch(reqs) {
  reqs = reqs.map(b => ({
    id: b['BTCH#BD'],
    type: b['BTYPEBD']
  }));
  return reqs.reduce((max, o) => parseInt(o['BTCH#BD'], 10) > parseInt(max['BTCH#BD'], 10) ? o : max, reqs[0]);
}

Результат оператора выбора querySync отправляется в качестве аргумента этой функции.Я понимаю, что массив reqs переделывается в новый массив с каждым элементом в массиве со свойствами 'BTCH # BD' и 'BTYPEBD', а их соответствующие значения реорганизуются в id: value1 и type: value2.Где я запутался, так это заявление о возвращении.

У меня не было слишком большого опыта работы с .reduce (), но поиск в Интернете в режиме онлайн говорит мне, что он в основном обрабатывает каждый элемент в массиве в одно значение в соответствии с условиями.Похоже, что метод redu () сравнивает размер между исходным и максимальным аргументами, и если оригинал больше, он принимает оригинал, а если max равен или больше, он принимает максимальное значение и самый первый элемент в массиве reqs.

Для справки, я console.logged значение результирующего возвращенного объекта, и он вернулся:

maxObj: 56978, OP2.

Исходный массив, который был отправлен был

rows: [{"BTCH#BD":56978,"BTYPEBD":"OP2"},
{"BTCH#BD":56978,"BTYPEBD":"OP2"},
{"BTCH#BD":56978,"BTYPEBD":"OP2"},
{"BTCH#BD":56978,"BTYPEBD":"OP2"},
{"BTCH#BD":56978,"BTYPEBD":"OP2"}]

1 Ответ

0 голосов
/ 09 октября 2018

Похоже, что функция возвращает правильное значение, но только потому, что они все одинаковы, и вы начинаете с допустимого значения.

карта берет этот исходный массив и возвращает новый массивкак это

[{ id: 56978, type: 'OP2' }]

Затем вы перебираете этот новый массив и возвращаете максимальное значение, сравнивая ключ BTCH # BD для тех объектов, которых больше не существует после функции карты,Вы должны сравнивать клавишу 'id', если хотите сравнить значения BTCH # BD.

Функция Reduce принимает два параметра: функцию обратного вызова и необязательное начальное значение.Начальное значение устанавливается равным reqs[0], которое является допустимым значением. Ваша функция обратного вызова проверяет, является ли undefined > undefined, а поскольку это не так, она возвращает начальное значение.

, записанное в несколько более удобном для восприятия видекак это:


    return reqs.reduce((max, o) => {
        if (parseInt(o.id, 10) > parseInt(max.id, 10)) {
            return o;
        }
        return max;
    }, reqs[0]);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...