Javascript 从对象数组中删除重复的关键点

Javascript 从对象数组中删除重复的关键点,javascript,arrays,javascript-objects,reduce,Javascript,Arrays,Javascript Objects,Reduce,我有一个像这样的对象数组 let array = [ { sector: "adad" }, { sector: "adadasdsd" }, { sector: "sdsdsd" }, { origin: "sdfsf" }, { destination: "dfsfsdf" } ]; 我希望它是这样的: let array = [ { sector: ["adad", "adadasdsd", "sdsds

我有一个像这样的对象数组

let array = [
  {
    sector: "adad"
  },
  {
    sector: "adadasdsd"
  },
  {
    sector: "sdsdsd"
  },
  {
    origin: "sdfsf"
  },
  {
    destination: "dfsfsdf"
  }
];
我希望它是这样的:

let array = [
  { sector: ["adad", "adadasdsd", "sdsdsd"] },
  { origin: ["sdfsf"] },
  { destination: ["dfsfsdf"] }
];

让我知道如何才能做到这一点。我知道reduce会帮我的。然而,我被困在如何继续下去?有什么帮助吗?

您可以尝试使用jquery

let array2 = {
        sector: [],
        origin: [],
        destination: []
    }


$.each(array, function (_index, value) {
    if (value.sector != null)
        array2.sector.push(value.sector)
    if (value.origin != null)
        array2.origin.push(value.origin)
    if (value.destination != null)
        array2.destination.push(value.destination)
})

您可以尝试使用jquery

let array2 = {
        sector: [],
        origin: [],
        destination: []
    }


$.each(array, function (_index, value) {
    if (value.sector != null)
        array2.sector.push(value.sector)
    if (value.origin != null)
        array2.origin.push(value.origin)
    if (value.destination != null)
        array2.destination.push(value.destination)
})

含还原剂的香草溶液:

let数组=[
{
“部门”:“adad”
},
{
“扇区”:“adadasdsd”
},
{
“部门”:“SDSD”
},
{
“来源”:“sdfsf”
},
{
“目的地”:“dfsfsdf”
}
]
让重新排列=数组。减少((acc,条目)=>{
if(entry.sector){acc[0].sector.push(entry.sector);}
else if(entry.origin){acc[1].origin.push(entry.origin);}
else{acc[2]。destination.push(entry.destination);}
返回acc;
},[{sector:[]},{origin:[]},{destination:[]}]);

console.log(重新排列)带有reduce的香草溶液:

let数组=[
{
“部门”:“adad”
},
{
“扇区”:“adadasdsd”
},
{
“部门”:“SDSD”
},
{
“来源”:“sdfsf”
},
{
“目的地”:“dfsfsdf”
}
]
让重新排列=数组。减少((acc,条目)=>{
if(entry.sector){acc[0].sector.push(entry.sector);}
else if(entry.origin){acc[1].origin.push(entry.origin);}
else{acc[2]。destination.push(entry.destination);}
返回acc;
},[{sector:[]},{origin:[]},{destination:[]}]);

console.log(重新排列)您可以使用哈希表来收集相同键的值,然后映射到单个键/值对

let array=[{sector:“adad”},{sector:“adadasdsd”},{sector:“sdsdsd”},{origin:“sdfsf”},{destination:“dfsfsdf”}],
分组=对象
.entries(array.reduce)(
(r,o)=>(
Object.entries(o.forEach([k,v])=>(r[k]=r[k]| |[]).push(v)),
R
),
Object.create(空)
))
.map(([k,v])=>({[k]:v}));

控制台日志(分组)您可以使用哈希表来收集相同键的值,然后映射到单个键/值对

let array=[{sector:“adad”},{sector:“adadasdsd”},{sector:“sdsdsd”},{origin:“sdfsf”},{destination:“dfsfsdf”}],
分组=对象
.entries(array.reduce)(
(r,o)=>(
Object.entries(o.forEach([k,v])=>(r[k]=r[k]| |[]).push(v)),
R
),
Object.create(空)
))
.map(([k,v])=>({[k]:v}));
控制台日志(分组)通用解决方案,使用:

let数组=[{“扇区”:“adad”},{“扇区”:“adadasdsd”},{“扇区”:“sdsdsd”},{“原点”:“sdfsf”},{“目的地”:“dfsfsdf”}]
让reduced=array.reduce((a,c,i)=>{
设key=Object.key(c)[0];
如果(!(输入a))a[输入]=[];
如果(!a[key])包括(c[key])一个[key],则推送(c[key]);
返回a;
}, {})
console.log(简化)
一种通用解决方案,使用:

let数组=[{“扇区”:“adad”},{“扇区”:“adadasdsd”},{“扇区”:“sdsdsd”},{“原点”:“sdfsf”},{“目的地”:“dfsfsdf”}]
让reduced=array.reduce((a,c,i)=>{
设key=Object.key(c)[0];
如果(!(输入a))a[输入]=[];
如果(!a[key])包括(c[key])一个[key],则推送(c[key]);
返回a;
}, {})

console.log(简化)
这里有一种方法:

let数组=[
{
“部门”:“adad”
},
{
“扇区”:“adadasdsd”
},
{
“部门”:“SDSD”
},
{
“来源”:“sdfsf”
},
{
“目的地”:“dfsfsdf”
}
]
设res=[];
array.map(项=>{
设key=Object.key(item)[0],value=item[key],
objRes=res.filter(r=>r[key]);
if(objRes.length==0){
设obj={};
obj[键]=[值];
res.push(obj);
}否则
对象[0][key].push(值);
});

控制台日志(res)这里有一种方法:

let数组=[
{
“部门”:“adad”
},
{
“扇区”:“adadasdsd”
},
{
“部门”:“SDSD”
},
{
“来源”:“sdfsf”
},
{
“目的地”:“dfsfsdf”
}
]
设res=[];
array.map(项=>{
设key=Object.key(item)[0],value=item[key],
objRes=res.filter(r=>r[key]);
if(objRes.length==0){
设obj={};
obj[键]=[值];
res.push(obj);
}否则
对象[0][key].push(值);
});

控制台日志(res)
如果您使用
数组。减少
映射
作为累加器,您可以以某种简洁的方式解决此问题:

let数组=[{sector:“adad”},{sector:“adadasdsd”},{sector:“sdsdsd”},{origin:“sdfsf”},{destination:“dfsfsdf”}];
const result=array.reduce((m,c,i,a)=>{
Object.keys(c).forEach(key=>m.set(key,[…(m.get(key)| |[]),c[key]]))
返回i==a.length-1?数组。from(m,([k,v])=>({[k]:v})):m
},新映射())

console.log(result)
如果您使用
数组。reduce
Map
作为累加器,您可以以某种简洁的方式解决此问题:

let数组=[{sector:“adad”},{sector:“adadasdsd”},{sector:“sdsdsd”},{origin:“sdfsf”},{destination:“dfsfsdf”}];
const result=array.reduce((m,c,i,a)=>{
Object.keys(c).forEach(key=>m.set(key,[…(m.get(key)| |[]),c[key]]))
返回i==a.length-1?数组。from(m,([k,v])=>({[k]:v})):m
},新映射())

console.log(result)
您应该为此尝试一些方法。你能给我们看看吗?你是说这样的吗<代码>变量项=[{sector:[“adad”,“adadasdsd”,“sdsdsd”]},{origin:[“sdfsf”]},{destination:[“dfsfsdf”]}]console.log(项)确定不需要一个对象作为结果?将需要映射到一个对象,以任何方式开始,你应该尝试一些这方面的东西。你能给我们看看吗?你是说这样的吗<代码>变量项=[{sector:[“adad”,“adadasdsd”,“sdsdsd”]},{origin:[“sdfsf”]},{destination:[“dfsfsdf”]}]console.log(项)确定不需要一个对象作为结果?需要映射到一个对象才能启动