2017-08-15 68 views
1

我试图用没有工作

货币创建一个对象中的JavaScript功能逻辑

期初余额

和期末余额

我有以下数据

var _ = require('underscore'); 

var accounts=[ 
    { 
     "id":"20", 
     "name":"OASIS MALL-RMB Account", 
     "branchId":"6", 
     "type_id":"1", 
     "currency_id":"1", 
     "balance":"0", 
     "createdBy":"2", 
     "active":"1", 
     "ts":"2017-06-30 00:12:08" 
    }, 
    { 
     "id":"21", 
     "name":"OASIS MALL-USD Account", 
     "branchId":"6", 
     "type_id":"1", 
     "currency_id":"2", 
     "balance":"0", 
     "createdBy":"2", 
     "active":"1", 
     "ts":"2017-06-30 00:12:09" 
    }, 
    { 
     "id":"22","name":"OASIS MALL-DIRHAM Account", 
     "branchId":"6", 
     "type_id":"1", 
     "currency_id":"3", 
     "balance":"0", 
     "createdBy":"2", 
     "active":"1", 
     "ts":"2017-06-30 00:12:09" 
    }, 
    { 
     "id":"23", 
     "name":"OASIS MALL-UGX Account", 
     "branchId":"6", 
     "type_id":"1", 
     "currency_id":"4", 
     "balance":"0", 
     "createdBy":"2", 
     "active":"1", 
     "ts":"2017-06-30 00:12:09" 
    }, 
    { 
     "id":"24", 
     "name":"OASIS MALL-KSH Account", 
     "branchId":"6", 
     "type_id":"1", 
     "currency_id":"5", 
     "balance":"0", 
     "createdBy":"2", 
     "active":"1", 
     "ts":"2017-06-30 00:12:09" 
    } 
] 

var balances =[ 
    { 
    "id":"101", 
    "branchId":"6", 
    "accountId":"20", 
    "openingBalance":"3260000", 
    "closingBalance":"3260000", 
    "date":"2017-08-15", 
    "ts":"2017-08-15 02:27:08" 
    }, 
    { 
    "id":"102", 
    "branchId":"6", 
    "accountId":"21", 
    "openingBalance":"1882492", 
    "closingBalance":"1882492", 
    "date":"2017-08-15", 
    "ts":"2017-08-15 02:27:08" 
    }, 
    { 
    "id":"103","branchId":"6", 
    "accountId":"22", 
    "openingBalance":"-3000", 
    "closingBalance":"-3000", 
    "date":"2017-08-15", 
    "ts":"2017-08-15 02:27:08" 
    }, 
    { 
    "id":"104", 
    "branchId":"6", 
    "accountId":"23", 
    "openingBalance":"95199318", 
    "closingBalance":"95199318", 
    "date":"2017-08-15", 
    "ts":"2017-08-15 02:27:08" 
    }, 
    { 
    "id":"105", 
    "branchId":"6", 
    "accountId":"24", 
    "openingBalance":"1847000", 
    "closingBalance":"1847000", 
    "date":"2017-08-15", 
    "ts":"2017-08-15 02:27:08" 
    } 
] 

我知道如何在循环和if语句中做到这一点。但我想这样做的功能方式 我已经尝试编写此代码。

var DisplayAccounts = function(accounts,balances){ 

    var displayaccounts = _(accounts).map((x)=>{ 


     var mybalance = _(balances) 
     .reduce((acc,z)=>{ 
     acc={ 
      currency :x.currency_id, 
      openingBalance : z.openingBalance, 
      closingBalance : z.closingBalance 
     }; 
     return acc; 
     },{}); 
    return mybalance; 

    }); 
    return displayaccounts; 
} 

console.log(DisplayAccounts(accounts,balances)); 

但它给了我一个我不喜欢的答案。 IT给我

[ { currency: '1', 
    openingBalance: '1847000', 
    closingBalance: '1847000' }, 
    { currency: '2', 
    openingBalance: '1847000', 
    closingBalance: '1847000' }, 
    { currency: '3', 
    openingBalance: '1847000', 
    closingBalance: '1847000' }, 
    { currency: '4', 
    openingBalance: '1847000', 
    closingBalance: '1847000' }, 
    { currency: '5', 
    openingBalance: '1847000', 
    closingBalance: '1847000' } ] 

相同的期初和期末余额通过。我需要每种货币都与其相应的期初和期末余额一样。

[ { currency: '1', 
    openingBalance: '3260000', 
    closingBalance: '3260000' }, 
    { currency: '2', 
    openingBalance: '1882492', 
    closingBalance: '1882492' }, 
    { currency: '3', 
    openingBalance: '-3000', 
    closingBalance: '-3000' }, 
    { currency: '4', 
    openingBalance: '95199318', 
    closingBalance: '95199318' }, 
    { currency: '5', 
    openingBalance: '1847000', 
    closingBalance: '1847000' } ] 

它怎么做到的?

回答

2

这不是一个纯粹的功能性的方法,但产生期望的结果:

function displayAccounts(acc, bal) { 
    return acc.map(x => { 
     let b = bal.find(b => b.accountId === x.id); 
     return { 
      currency: x.currency_id, 
      openingBalance: b.openingBalance, 
      closingBalance: b.closingBalance 
     } 
    }); 
} 

console.log(displayAccounts(accounts, balances)); 
+0

谢谢。如果有人给了我一个纯粹功能性的答案,我会评价它并接受它 – henrybbosa

+0

但等待@DevDig这对我来说似乎是一个纯粹的功能。你能告诉我为什么它不纯吗? – henrybbosa

+0

@HenryBbosa由于函数式编程是一个范例,有些人可能认为这是功能性的。然而,一些纯粹主义者可能会将函数式编程定义为“构成纯函数”,因此帐号映射函数中不会有'状态'(b变量)。 – DevDig