Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript合并数组(如果内部对象相同)_Javascript_Arrays_Object_If Statement_Merge - Fatal编程技术网

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);
  }
} 

我现在已经浪费了两天多的时间。我还在学习。这是为了我的学校项目。我希望你能帮助我。谢谢你一直以来,如果你想要调试帮助,请展示你迄今为止尝试了哪些不起作用。用我做过的部分编辑。谢谢。希望你能帮助我。