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(项)代码>确定不需要一个对象作为结果?需要映射到一个对象才能启动