【发布时间】:2015-07-28 05:48:37
【问题描述】:
使用map、filter、reduce等函数式方法,如何将嵌套的for循环转换为声明式函数。以下面为例:
getTxns: function () {
var txnsToCheck = [];
var pages = this.data;
for (var i = 0; i < pages.length; i++) {
var page = pages[i];
var txns = [];
for (var j = 0; j < page.txns.length; j++) {
if (page.txns[j].grade) {
txnsToCheck.push({ page: i, txn: j, virtual: false });
}
else {
txnsToCheck.push({ page: i, txn: 0, virtual: true });
}
}
return txnsToCheck;
},
以下是功能重写的无效尝试,最后一张地图不起作用,但我相信说明了意图,这是一个条件分配。
getTxns: function () {
return this.data.
map(function (page) {
return page.txns.
map(function(txn){
if (txn.grade){
return {page: txn.page_idx, txn: page.txns.indexOf(txn), virtual: false}
} else {
return {page: txn.page_idx, txn: 0, virtual: true}
}
})
})
我考虑过过滤器,但不清楚您是否可以在一次操作中遍历链进行第二个过滤器和映射?
想知道 for 循环的工作声明式版本是什么样的。
以下是数据架构的示例:
"derived": [
{
"page_idx": 0,
"page_image_url": "",
"doc_pk": 123456,
"txns": [
{
"page_idx": 0,
"grade": 0,
"explanation": "test 1",
"id": 1962754,
},
{
"page_idx": 0,
"is_recurring": false,
"bank_account_pk": null,
"grade": 0,
"explanation": "test 2",
"id": 1962753,
},
]
},
{
"page_idx": 1,
"page_image_url": "",
"doc_pk": 2654321,
"txns": []
},
{
"page_idx": 2,
"page_image_url": "",
"doc_pk": 123457,
"txns": []
}
]
【问题讨论】:
-
看起来你想要一个平面地图。您可以使用
reduce来实现它。
标签: javascript functional-programming