功能如下:
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"}]
答案 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]);