Javascript 对对象数组进行排序并使用公共值创建新数组

Javascript 对对象数组进行排序并使用公共值创建新数组,javascript,arrays,loops,sorting,object,Javascript,Arrays,Loops,Sorting,Object,我得到了以下对象数组: let arr = [ { status: 'Approved', domain: 'random.com', refID: '5005w1X4wL7:ref' }, { status: 'Approved', domain: 'random123.com', refID: '5005w1X4wL7:ref' }, { s

我得到了以下对象数组:

let arr = [
    {
        status: 'Approved',
        domain: 'random.com',
        refID: '5005w1X4wL7:ref'
    },
    {
        status: 'Approved',
        domain: 'random123.com',
        refID: '5005w1X4wL7:ref'
    },
    {
        status: 'Approved',
        domain: 'helloworld.com',
        refID: '5005w1X4wL7'
    },
    {
        status: 'Approved',
        domain: 'helloworld123.com',
        refID: '5005w1X4wL7'
    }
]
很抱歉,我不熟悉编码,但我需要对该数组进行排序或筛选,以找到匹配的refID并创建新的对象数组。请参阅我正在寻找的输出示例:

let newArr = [
  {
    status: 'Approved',
    domain: ['random.com','random123.com'],
    refID: '5005w1X4wL7:ref'
  },
  {
    status: 'Approved',
    domain: ['hellworld.com','helloworld123.com'],
    refID: '5005w1X4wL7'
  }
]

我将创建一个
stackDomainsByRef
函数,该函数使用
.forEach
循环来循环
arr
,在将域添加到输出数组中的现有对象并在forEach循环的每一步将一个假变量设置为真后,在内部创建一个常规循环来中断。如果变量仍然为false,则会将新对象添加到输出数组中。当然会返回输出数组

const arr=[
{
状态:“已批准”,
域名:“random.com”,
refID:'5005w1X4wL7:参考'
},
{
状态:“已批准”,
域名:'random123.com',
refID:'5005w1X4wL7:参考'
},
{
状态:“已批准”,
域名:“helloworld.com”,
refID:'5005w1X4wL7'
},
{
状态:“已批准”,
域名:“helloworld123.com”,
refID:'5005w1X4wL7'
}
];
函数stackDomainsByRef(数组){
常数a=[];
array.forEach(o=>{
设w=false;

对于(设i=0,v,l=a.length;i这里有一种使用reduce的方法

const arr=[{
状态:“已批准”,
域名:“random.com”,
refID:'5005w1X4wL7:参考'
},
{
状态:“已批准”,
域名:'random123.com',
refID:'5005w1X4wL7:参考'
},
{
状态:“已批准”,
域名:“helloworld.com”,
refID:'5005w1X4wL7'
},
{
状态:“已批准”,
域名:“helloworld123.com”,
refID:'5005w1X4wL7'
}
];
结果=arr.reduce((acl、v、idx、self)=>{
acl[v['refID']]=acl[v['refID']]| | v;
var domain=acl[v['refID']['domain'];
if(domain.indexOf(v['domain'])小于0{
acl[v['refID']['domain']=domain+”,“+v['domain'];
}
返回acl;
}, {});
结果=对象.值(结果).map((v)=>{
v['domain']=v.domain.split(“,”);
返回v;
});

console.log(结果)请看下面的代码。而且你只需要一点小小的调整。记住我们不会得到报酬,这是一个存档-不允许重复的问题。让我们可以方便地帮助你。:)你可以使用
groupAndMerge(arr,'refID',domain')
(第二个或第三个片段)你制作了
domain
字符串。