1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00

Remove unneeded array cloning in getSendToAccounts selector

The use of `Object.entries` here to map the accounts into a new array effectively
produces a shallow clone of the array without guaranteeing the order of the original
array (as object iteration order is implementation-specific and variable). From MDN [1]:

> The **`Object.entries()`** method returns an array of a given object's own enumerable
> string-keyed property `[key, value]` pairs, in the same order as that provided by a
> `for...in` loop

And also:

> The ordering of the properties is the same as that given by looping over the
> property values of the object manually.

Both of which suggest that the iteration order is the same as `for...in`, which is to
say that it's not specified. [2] [3]

This changeset removes the cloning, keeping the shallow clone created the line before
which preserves the order of the items in the array.

  [1]:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
  [2]:https://stackoverflow.com/a/5525820/1267663
  [3]:https://stackoverflow.com/a/30919039/1267663
This commit is contained in:
Whymarrh Whitby 2019-04-11 21:33:33 -02:30
parent 2786932576
commit c4a3d4ea82

View File

@ -240,9 +240,7 @@ function getSendTo (state) {
function getSendToAccounts (state) { function getSendToAccounts (state) {
const fromAccounts = accountsWithSendEtherInfoSelector(state) const fromAccounts = accountsWithSendEtherInfoSelector(state)
const addressBookAccounts = getAddressBook(state) const addressBookAccounts = getAddressBook(state)
const allAccounts = [...fromAccounts, ...addressBookAccounts] return [...fromAccounts, ...addressBookAccounts]
// TODO: figure out exactly what the below returns and put a descriptive variable name on it
return Object.entries(allAccounts).map(([key, account]) => account)
} }
function getSendWarnings (state) { function getSendWarnings (state) {