Суммируйте количество свойств, сгруппированных по имени - PullRequest
0 голосов
/ 15 марта 2020
This is my function where i am merging the data:

getStaffCount(data) {
    if (data == null || data.results === null )
        return [];
    else
        return data.results.StaffCount.map(m => ({ Name: m.Name, Accounts: m.Accounts  })).
                    concat(data.results.RepProviderAccount.map(m => ({ Name: m.Name, Accnt: m.Accnt  }))).
                    concat( data.results.ProviderAccount.map(m => ({ Name: m.Name, Account: m.Account })));
}

Это моя таблица

<PowerTable Data={{ rows: this.getStaffCount(this.props.GridData) }}  rowsPerPage={5} orderBy="Name" order="asc" >
                    <PowerColumn id='Name' columnName='Name' numeric={false} disablePadding={false} label='Profile Name' width={100}>
                    </PowerColumn>
                    <PowerColumn id='Accounts' columnName='Accounts' numeric={false} disablePadding={false} label='Staff Accounts' width={100}>
                    </PowerColumn>
                    <PowerColumn id='Account' columnName='Account' numeric={false} disablePadding={false} label='Provider Account' width={100} >
                    </PowerColumn>
                    <PowerColumn id='Accnt' columnName='Accnt' numeric={false} disablePadding={false} label='Rep Provider Account' width={100} >
                    </PowerColumn>
</PowerTable>

This is the output currently i am getting.

Я хочу добавить значения столбцов, если они имеют одинаковое имя профиля. (I я получаю данные из запросов SoQL через API) Это мои данные: enter image description here

Это функция, в которой я группирую и унифицирую их, но, похоже, это не работает :

groupBy(column, data) {
    var groups = {};

    data.forEach(function (itm) {
      groups[itm[column]] = groups[itm[column]] || [];
      groups[itm[column]].push(itm);
    });

    return groups;
  }

   uniquify(groups) {
    var unique = [];
    for (var key in groups) {
      if (groups.hasOwnProperty(key)) {
        unique.push(groups[key][0]);
      }
    }

    return unique;
  }
   arrUnique(arr) {
    var groupsByName = this.groupBy("Name", arr);
    var uniqueNames = this.uniquify(groupsByName);
   return uniqueNames;
  }

1 Ответ

0 голосов
/ 15 марта 2020

Лучше всего с уменьшением.

const results = data.reduce((arr, dat) => {
  // Find the index of the item with this name...
  let index = arr.findIndex(item => item.name === dat.name)

  // If it's not -1 this will be the index where this item has
  // already been added. Otherwise it doesn't exist yet
  // so push it...
  if(index !== -1) arr[index].account += dat.account
  else arr.push(dat)
 }, [])

Что-то подобное должно дать вам массив объектов, в которых все account свойства были умножены вместе.

Примечание Я заметил, что вы иногда имеете ' Учетная запись », а иногда и« Accnt »вам придется написать дополнительный код, чтобы восполнить это. Так что это всего лишь общий план.

...