Javascript 合并来自不同查询的数据而不重复

Javascript 合并来自不同查询的数据而不重复,javascript,reactjs,merge,soql,Javascript,Reactjs,Merge,Soql,我通过Api从三个不同的查询中获取数据。我希望数据在没有重复数据的情况下被合并 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.

我通过Api从三个不同的查询中获取数据。我希望数据在没有重复数据的情况下被合并

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>
数据:

作为对象 如果数据是一个对象,那么简单的方法就是使用spread Operator

const combinedData = {
  ...dataSrc1,
  ...dataSrc2,
  ...dataSrc3,
}
所有匹配的键都将被上一个键覆盖

作为一个数组 这有点复杂。假设对象具有唯一id(或将2标识为同一项的任何值),则可以使用集合,因为它们只能具有唯一值

const array = [
  ...dataSrc1,
  ...dataSrc2,
  ...dataSrc3,
]
const unique = [...new Set(array.map(item => item.id))];

你对我的问题的回答是什么样的数据以及如何对它们进行分组没有任何意义,你也没有回答Joe
只是显示json数据,告诉他数据来自哪里,而不是它是什么

因此,我假设您按名称分组,并且忽略了帐户。您可以按以下方式对它们进行分组:

const数据={
结果:{
员工人数:[
{
名称:‘a’,
账户:2,
},
{
名称:‘b’,
账目:20,
},
],
RepProviderAccount:[
{
名称:‘a’,
事由:3,,
},
],
ProviderAccount:[
{
名称:‘a’,
账户:1,
},
],
},
};
常数分组=[
…data.results.StaffCount,
…data.results.RepProviderAccount,
…data.results.ProviderAccount,
].减少((结果,项目)=>{
常数{
名称
账户=0,
账户=0,
Accnt=0,
}=项目;
const existing=result.get(item.Name)|{
名称
帐户:0,
帐户:0,
会计科目:0,
};
现有账户+=账户;
现有账户+=账户;
现有.会计科目+=会计科目;
返回结果.set(名称,现有);
},新地图());

console.log([…grouped.values()])将更容易看到如何合并。您只映射名称和帐户,Staff、RepProvider和Provider来自哪里?您想如何合并它们,它们是按名称合并还是按帐户合并?@HMR这些是列标签名称。name和account是中的实际列名database@JoeLloyd我正在从SoQL查询中获取数据。这是一个对象,但扩展运算符似乎不起作用。我已经更新了问题。如果您需要更多信息,请告诉我know@Manmeet我将尝试通过逆向工程来总结您的需求,您对它给出了困惑不解的描述:您有3个包含对象数组的数据集,所有数据集都有一个名称属性。StaffCount具有Accounts属性,RepProviderAccount具有Accnt属性,ProviderAccount具有Account属性。这些属性是数字。您希望对按名称分组的属性数求和
const array = [
  ...dataSrc1,
  ...dataSrc2,
  ...dataSrc3,
]
const unique = [...new Set(array.map(item => item.id))];