javascript合并数组(如果内部对象相同)
任何人在线。我需要帮助。我有一个这样的数组javascript合并数组(如果内部对象相同),javascript,arrays,object,if-statement,merge,Javascript,Arrays,Object,If Statement,Merge,任何人在线。我需要帮助。我有一个这样的数组 var array = [ { roomNumber: 'R01', roomType: 'Deluxe', basic_facilities: 'Hot Water', additional_facilities: 'Iron' }, { roomNumber: 'R01', roomType: 'Deluxe', basic_facilities: 'Minibar', additional_facilities: 'AC' },
var array = [ {
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: 'Hot Water',
additional_facilities: 'Iron' },
{
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: 'Minibar',
additional_facilities: 'AC' },
{
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: 'cold Water',
additional_facilities: 'Fan' },
{
roomNumber: 'R02',
roomType: 'standerd',
basic_facilities: 'View',
additional_facilities: 'Washing' },
{
roomNumber: 'R02',
roomType: 'standerd',
basic_facilities: 'View 2',
additional_facilities: 'wash' }
]
var result =[{
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: ['Hot Water','Minibar','cold Water'],
additional_facilities: ['Iron','AC','fan'] },{
roomNumber: 'R02',
roomType: 'standerd',
basic_facilities: ['View','View 2'],
additional_facilities: ['Washing','wash'] }]
我想把它做成这样
var array = [ {
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: 'Hot Water',
additional_facilities: 'Iron' },
{
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: 'Minibar',
additional_facilities: 'AC' },
{
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: 'cold Water',
additional_facilities: 'Fan' },
{
roomNumber: 'R02',
roomType: 'standerd',
basic_facilities: 'View',
additional_facilities: 'Washing' },
{
roomNumber: 'R02',
roomType: 'standerd',
basic_facilities: 'View 2',
additional_facilities: 'wash' }
]
var result =[{
roomNumber: 'R01',
roomType: 'Deluxe',
basic_facilities: ['Hot Water','Minibar','cold Water'],
additional_facilities: ['Iron','AC','fan'] },{
roomNumber: 'R02',
roomType: 'standerd',
basic_facilities: ['View','View 2'],
additional_facilities: ['Washing','wash'] }]
我知道这是一个基本的东西。但我需要你的帮助。谢谢
这就是我到目前为止所做的
var数组=[{
房间号:“R01”,
房间类型:“豪华”,
基本设施:“热水”,
附加设施:“铁”},
{
房间号:“R01”,
房间类型:“豪华”,
基本设施:“迷你酒吧”,
附加设施:“AC”},
{
房间号:“R01”,
房间类型:“豪华”,
基本设施:“冷水”,
附加设施:“风扇”},
{
房间号:“R02”,
房间类型:'standerd',
基本设施:“视图”,
附加设施:“清洗”},
{
房间号:“R02”,
房间类型:'standerd',
基本设施:“视图2”,
附加设施:“清洗”}
]
结果=[];
array.forEach(函数(a){
如果(!此[a.roomNumber]){
这个[a.roomNumber]={roomNumber:a.roomNumber};
结果。推送(此[a.房间号]);
}
},Object.create(null));
控制台日志(结果)代码>看起来您试图在迭代时将项组合到一个对象中,这是正确的想法,但要使用的方法是reduce
:回调的第一个参数将是上一次迭代返回的值(或者,在第一次迭代中,初始值-传递给.reduce
的第二个参数)
在每次迭代中,如果累加器(第一个参数)上还不存在对象,则在roomNumber
处创建一个对象-然后,推送到该对象中的basic\u facilities
和additional\u facilities
数组。最后,使用object.values
将对象转换为其值的数组:
var数组=[{
房间号:“R01”,
房间类型:“豪华”,
基本设施:“热水”,
附加设施:“铁”
},
{
房间号:“R01”,
房间类型:“豪华”,
基本设施:“迷你酒吧”,
附加设施:“AC”
},
{
房间号:“R01”,
房间类型:“豪华”,
基本设施:“冷水”,
附加设施:“风扇”
},
{
房间号:“R02”,
房间类型:'standerd',
基本设施:“视图”,
附加_设施:“清洗”
},
{
房间号:“R02”,
房间类型:'standerd',
基本设施:“视图2”,
附加设施:“清洗”
}
];
const roomsByRoomNumber=数组。减少((a,项)=>{
const{roomNumber,roomType,basic_facility,additional_facility}=项目;
如果(!a[roomNumber]){
a[roomNumber]={roomNumber,roomType,基本设施:[],附加设施:[]};
}
a[roomNumber]。基本设施。推送(基本设施);
a[roomNumber]。附加设施。推送(附加设施);
返回a;
}, {});
常量结果=对象值(roomsByRoomNumber);
console.log(result);
似乎您想要组合房间号、房间类型的基数组。您可以使用reduce()
和findIndex()
来实现这一点
var arr=[{roomNumber:'R01',roomType:'Deluxe',基本设施:'Hot Water',附加设施:'Iron'},
{房间号:'R01',房间类型:'Deluxe',基本设施:'Minibar',附加设施:'AC'},
{房间号:'R01',房间类型:'Deluxe',基本设施:'cold Water',附加设施:'Fan'},
{房间号:'R02',房间类型:'standerd',基本设施:'View',附加设施:'Washing'},
{房间号:'R02',房间类型:'standerd',基本设施:'View 2',附加设施:'wash'}
]
设mkeys=['roomNumber','roomType']
设ckeys=[“基本设施”,“附加设施”]
让结果=arr.reduce((ac,a)=>{
设ind=ac.findIndex(x=>mkeys.every(key=>x[key]==a[key]);
a=JSON.parse(JSON.stringify(a));
forEach(key=>a[key]=[a[key]]);
ind==-1?ac.push(a):ckeys.forEach(key=>ac[ind][key].push(a[key][0]);
返回ac;
},[])
console.log(结果);
只是另一个解决方案
...
const result = [];
for (const room of array) {
const processedRoom = result.find(r => r.roomNumber == room.roomNumber);
if (processedRoom) {
processedRoom.basic_facilities.concat(room.basic_facilities);
processedRoom.additional_facilities.concat(room.additional_facilities);
} else {
result.push(room);
}
}
我现在已经浪费了两天多的时间。我还在学习。这是为了我的学校项目。我希望你能帮助我。谢谢你一直以来,如果你想要调试帮助,请展示你迄今为止尝试了哪些不起作用。用我做过的部分编辑。谢谢。希望你能帮助我。