【发布时间】:2016-08-12 10:23:40
【问题描述】:
考虑这样的数据对象
var data = [
{name: 'abc', dis: 0},
{name: 'bcd', dis: 30},
{name: 'cde', dis: 70},
{name: 'def', dis: 22},
{name: 'efg', dis: 40},
{name: 'fgh', dis: 29},
{name: 'ghi', dis: 41},
{name: 'hij', dis: 33}
];
我只想在累积距离大于或等于100时过滤掉对象。所以需要的输出是
var finalData = [
{name: 'abc', dis: 0}, //start point
{name: 'cde', dis: 100}, // 0 + 30 + 70
{name: 'ghi', dis: 132}, //22 + 40 + 29 + 41
{name: 'hij', dis: 33} // 33 as points ended
];
当然,我可以通过 for-loop 轻松完成并像这样推送
var finalData = [];
var sum = 0;
for(var i=0;i<data.length;i++) {
sum += data[i].dis;
if(i == 0 || sum >= 100) {
finalData.push({name: data[i].name, dis: sum});
sum = 0;
}
}
但想以 Rxjs 风格学习它。
【问题讨论】:
-
IMO,for 循环将是最简洁的编码方式。
-
代码相同,但使用reduce更容易推理。
标签: javascript functional-programming rxjs5