Javascript 功能逻辑不起作用

标签 javascript function

我正在尝试用

创建一个对象

currency

opening balance

and closing balance

我有以下数据

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));

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

[ { 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' } ]

它是怎么做到的?

最佳答案

这不是纯函数式方法,但会生成所需的结果:

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));

关于Javascript 功能逻辑不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45695404/

相关文章:

r - 委派函数调用的便捷方式

javascript - 如何禁用 Javascript 中的放大/缩小按钮?

c - 参数名省略错误?

R错误if语句 'argument is of length zero'

javascript - jQuery slider 不可拖动

ios - 无法将变量从类中的函数传递到 Swift 中的另一个函数

来自 String 的 Javascript 函数构造函数无法运行

javascript - 如何在像 mustache 这样的无逻辑模板引擎中制作导航栏

java - 通过套接字在Java桌面应用程序和Java浏览器小程序之间建立通信

javascript - 兼容所有版本 Bingmap Control 的 JavaScript