此JavaScript代码如何处理此SQL查询结果?

时间:2018-10-09 19:34:26

标签: javascript odbc

功能如下:

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 select语句结果作为参数发送到此函数。我了解到reqs数组正在被重新构造为一个新数组,该数组中的每个元素都具有属性'BTCH#BD'和'BTYPEBD'以及它们各自的值被重新组织为id:value1和type:value2。我感到困惑的是return语句。

我对.reduce()并没有太多的经验,但是在网上对其进行谷歌搜索告诉我,它基本上根据条件将数组中的每个元素处理为单个值。看起来reduce()方法正在比较原始参数和max参数之间的大小,如果original较大,则采用原始值,而如果max等于或较大,则采用最大值和reqs数组中的第一个元素。

作为参考,我用console.logging了返回的对象的值,并返回:

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 :(得分:0)

函数似乎返回了正确的值,但这仅仅是因为它们都相同并且您从一个有效值开始。

地图正在获取原始数组,并返回了这样的新数组

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

然后,您将遍历该新数组,并通过比较这些对象上的BTCH#BD键来返回最大值,该键在map函数之后不再存在。如果要比较BTCH#BD值,则应该比较'id'键。

reduce函数采用两个参数:回调函数和可选的初始值。初始值被设置为reqs[0],这是一个有效值。您的回调函数将检查undefined > undefined是否为const activeRail = this[`rails-${this.className}-${this.state.indexY}`]; ,因为它不是,它将返回初始值。

以更具可读性的方式编写,看起来像这样:


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