我正在写一个简单的减少功能:
var tiles = [
{
"date": "2017-11-26",
"cloudCoverage": 92.2,
"area": 12055600804
},
{
"date": "2017-11-26",
"cloudCoverage": 92.78,
"area": 12055600804
},
{
"date": "2017-11-26",
"cloudCoverage": 97.29,
"area": 11609327018
}
]
function selectDateTile(tiles) {
return tiles.reduce((tile, currentPick) => {
console.log('tileArea: ', tile.area, 'currentPick area: ', currentPick.area)
return tile.area + currentPick.area
});
}
console.log(selectDateTile(tiles))
我希望它能记录对象的实际值,以及所有区域的总和:
" tilearea:" 12055600804" CurrentPick区域:" 12055600804" Tilearea:" 12055600804" CurrentPick区域:" 24111201608 ...
但是我在JSBIN中获得的控制台输出是:
" tilearea:" 12055600804" CurrentPick区域:" 12055600804" Tilearea:" 未定义的" CurrentPick区域:" 11609327018 NAN
我在做什么错?
jsbin参考
请记住,第一个参数传递给您的回调是累加器,您的回调应该返回该累加器的更新版本,然后在下一个呼叫上使用。因此,tile
仅是 first 调用的数组中的条目;之后,这将是您的回调返回。
如果您想总结area
属性,则要为累加器提供初始值(对reduce
的第二个参数),然后将其用作值,而不是对象:
function selectDateTile(tiles) {
return tiles.reduce((sum, currentPick) => { // <== Note `sum` parameter
return sum + currentPick.area; // <== Using `sum`
}, 0); // <== 0 as initial value
}
实时示例:
var tiles = [
{
"date": "2017-11-26",
"cloudCoverage": 92.2,
"area": 12055600804
},
{
"date": "2017-11-26",
"cloudCoverage": 92.78,
"area": 12055600804
},
{
"date": "2017-11-26",
"cloudCoverage": 97.29,
"area": 11609327018
}
];
function selectDateTile(tiles) {
return tiles.reduce((sum, currentPick) => { // <== Note `sum` parameter
return sum + currentPick.area; // <== Using `sum`
}, 0); // <== 0 as initial value
}
console.log(selectDateTile(tiles));
you 可以写下您的回调,以便检测到该条目是作为第一个参数还是累加器,但它不必要地使代码复杂化。
我在做什么错?
您没有检查tile
是否具有area
属性,因为它是累加器
function selectDateTile(tiles) {
return tiles.reduce((tile, currentPick) => {
console.log('tileArea: ', tile.area, 'currentPick area: ', currentPick.area)
return tile.area ? tile.area + currentPick.area : tile + currentPick.area;
});
}