Javascript 如何连接具有相同id的对象值
我有一个数组:Javascript 如何连接具有相同id的对象值,javascript,arrays,Javascript,Arrays,我有一个数组: let ar = [ { uid:1, flat_no: 1 }, { uid:2, flat_no: 2 }, { uid:1, flat_no:3 } ]; 如果uid相同,那么我想删除重复的uid,并将其flat\u no连接起来。输出数组应如下所示: [ { uid:1,
let ar = [
{
uid:1,
flat_no: 1
},
{
uid:2,
flat_no: 2
},
{
uid:1,
flat_no:3
}
];
如果uid
相同,那么我想删除重复的uid
,并将其flat\u no
连接起来。输出数组应如下所示:
[
{
uid:1,
flat_no: [1,3]
},
{
uid:2,
flat_no: 2
}
];
您可以使用和的组合 如果在累加器数组中找到现有项,只需更新它的
flat\u no
属性,否则将它推送到累加器数组
让arr=[
{
uid:1,
1号公寓
},
{
uid:2,
二号公寓
},
{
uid:1,
3号公寓
}
]
arr=arr.reduce((arr,项目)=>{
const existing=arr.find(innerItem=>innerItem.uid===item.uid)
如果(现有){
existing.flat\u no=Array.isArray(existing.flat\u no)
?现有的单位号
:[现有单位编号]
现有平推编号(项目平推编号)
}否则{
到货推送(项目)
}
返回arr
}, [])
console.log(arr)
您可以使用和的组合
如果在累加器数组中找到现有项,只需更新它的flat\u no
属性,否则将它推送到累加器数组
让arr=[
{
uid:1,
1号公寓
},
{
uid:2,
二号公寓
},
{
uid:1,
3号公寓
}
]
arr=arr.reduce((arr,项目)=>{
const existing=arr.find(innerItem=>innerItem.uid===item.uid)
如果(现有){
existing.flat\u no=Array.isArray(existing.flat\u no)
?现有的单位号
:[现有单位编号]
现有平推编号(项目平推编号)
}否则{
到货推送(项目)
}
返回arr
}, [])
console.log(arr)
1)将初始数组减少为一个对象,该对象以uid作为键,以平面号作为值
2) 然后在关键点上运行一个映射,将其转换为具有uid和平面号的对象数组
1) 第一步代码
let ar = [{uid:1, flat_no: 1},{uid:2, flat_no: 2},{uid:1, flat_no:3}];
let outputObj = ar.reduce((outputObj,currObj,currIndex) => {
let {uid,flat_no} = currObj
if (outputObj[uid]) {
outputObj[uid].push(flat_no)
}
else {
outputObj[uid] = [flat_no]
}
return outputObj
},{})
(二)
1) 将初始数组减少为一个对象,该对象以uid作为键,以平面号作为值
2) 然后在关键点上运行一个映射,将其转换为具有uid和平面号的对象数组
1) 第一步代码
let ar = [{uid:1, flat_no: 1},{uid:2, flat_no: 2},{uid:1, flat_no:3}];
let outputObj = ar.reduce((outputObj,currObj,currIndex) => {
let {uid,flat_no} = currObj
if (outputObj[uid]) {
outputObj[uid].push(flat_no)
}
else {
outputObj[uid] = [flat_no]
}
return outputObj
},{})
(二)
您可以迭代数组并填充对象(此处用作哈希映射)
完成后,提取值以获得结果
let hashResult = {}
ar.forEach(element => {
if (hashResult[element.uid] == undefined) {
hashResult[element.uid] = { uid: element.uid, flat_no: [] }
}
hashResult[element.uid].flat_no.push(element.flat_no)
})
let result = Object.values(hashResult)
console.log(new Date(), result)
您可以迭代数组并填充对象(此处用作哈希映射)
完成后,提取值以获得结果
let hashResult = {}
ar.forEach(element => {
if (hashResult[element.uid] == undefined) {
hashResult[element.uid] = { uid: element.uid, flat_no: [] }
}
hashResult[element.uid].flat_no.push(element.flat_no)
})
let result = Object.values(hashResult)
console.log(new Date(), result)
您可以使用单个数组以简洁的方式执行此操作。减少和对象。值以匹配所需的输出:
let data=[{uid:1,平面编号1},{uid:2,平面编号2},{uid:1,平面编号3}];
const result=data.reduce((r,{uid,flat_no})=>{
r[uid]?r[uid]。展开号=[r[uid]。展开号,展开号]:r[uid]={uid,展开号}
返回r
}, {})
console.log(Object.values(result))
您可以使用单个数组以简洁的方式执行此操作。减少和对象。值以匹配所需的输出:
let data=[{uid:1,平面编号1},{uid:2,平面编号2},{uid:1,平面编号3}];
const result=data.reduce((r,{uid,flat_no})=>{
r[uid]?r[uid]。展开号=[r[uid]。展开号,展开号]:r[uid]={uid,展开号}
返回r
}, {})
console.log(Object.values(result))
发布的问题似乎根本不包括解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试的内容,以便说明您遇到的具体障碍。有关更多信息,请参阅并获取。查看此项,了解您迄今为止尝试了哪些方法?发布的问题似乎根本不包含解决问题的方法。StackOverflow希望您能这样做,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您已尝试的内容,以便说明您遇到的具体障碍。欲了解更多信息,请查看并使用。查看您迄今为止尝试了什么?我认为我们需要的格式是平面图编号:[1,3]
,而不是平面图编号:'1,3'
是的,根据当前的操作,这一个工作正常。我认为我们需要的格式是平面图编号:[1,3]
,不flat\u no:'1,3'
是的,根据当前的操作,这个是正确的。finalOutput
是错误的,它应该是:[{uid:1,flat\u no:[1,3]},{uid:2,flat\u no:2}
finalOutput
是错误的,它应该是:[{uid:1,flat\u-no:[1,3]},{uid:2,flat\u-no:2}
。