Patricio Vargas
Patricio Vargas

Reputation: 5522

How can I optimize the following JavaScript function

I'm trying to optimize my code or see if there's a better way to do it. Given values for acctData and balances below, I need to return an array of accounts filtered by the user name. my code works

const acctData = [{
    acctNum: "AAA - 1234",
    user: "Alice"
  },
  {
    acctNum: "AAA - 5231",
    user: "Bob"
  },
  {
    acctNum: "AAA - 9921",
    user: "Alice"
  },
  {
    acctNum: "AAA - 8191",
    user: "Alice"
  }
];

const balance = {
  "AAA - 1234": 4593.22,
  "AAA - 9921": 0,
  "AAA - 5231": 232142.5,
  "AAA - 8191": 4344
};

const combinedAccBalance = JSON.parse(JSON.stringify(acctData));

const getAccountNumbers = (filterByUser) => {
  return combinedAccBalance
    .filter(acc => {
      acc.balance = balance[acc.acctNum];
      return acc.user === filterByUser;
    })
    .sort((a, b) => {
      return a.balance - b.balance;
    })
    .map(fa => {
      return fa.acctNum;
    });
};

console.log(getAccountNumbers("Alice"));
//Returns ["AAA - 9921", "AAA - 8191", "AAA - 1234"]

Upvotes: 1

Views: 305

Answers (1)

aravind_reddy
aravind_reddy

Reputation: 5466

you can just skip the deep clone part and do something like this:

const acctData = [{
    acctNum: "AAA - 1234",
    user: "Alice"
  },
  {
    acctNum: "AAA - 5231",
    user: "Bob"
  },
  {
    acctNum: "AAA - 9921",
    user: "Alice"
  },
  {
    acctNum: "AAA - 8191",
    user: "Alice"
  }
];

const balance = {
  "AAA - 1234": 4593.22,
  "AAA - 9921": 0,
  "AAA - 5231": 232142.5,
  "AAA - 8191": 4344
};

let getAccountNumbers = (filterByUser) => {
  return acctData
    .filter(acc => acc.user === filterByUser)
    .sort((a, b) => {
      return balance[a.acctNum] - balance[b.acctNum];
    })
    .map(fa => {
      return fa.acctNum;
    });
};

console.log(getAccountNumbers("Alice"));
//Returns ["AAA - 9921", "AAA - 8191", "AAA - 1234"]

Upvotes: 3

Related Questions