Javascript 将相邻重复值分组到数组中的最佳方法

Javascript 将相邻重复值分组到数组中的最佳方法,javascript,loops,lodash,Javascript,Loops,Lodash,我有一个数组roomList它有如下值 let roomList=[ {value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3}, {value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6}, {value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8

我有一个数组
roomList
它有如下值

let roomList=[
  {value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3}, 
  {value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6}, 
  {value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8}
];
我试图做的是将所有
roomList[I].value
推送到另一个数组中(roomList[I].value将是唯一的)。但有些人认为我不能得到所有想要的东西

我的代码是这样的

let adjacentRoomId=[];

for(let i=0;i<roomList.length;i++){
 for(let j=i+1;j<roomList.length;j++){
    if(roomList[i].type===roomList[j].type){
     adjacentRoomId.push(roomList[i].value);
      break;
    }
  }
}
let adjacentRoomId=[];

for(让i=0;i直接通过主数组并检查正在生成的第二个数组中的元素)

如果元素存在于第二个数组中,就不要将其插入第二个数组

在输出中,
{value:12,type:8},{value:9,type:1}
不会重复,只出现一次

var x=roomList=[
{value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3},
{value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6},
{value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8},{value:12,type:8},{value:9,type:1}
];
var n=[];
x、 forEach(函数(e){
var isExists=false;
n、 forEach(函数(ne){
如果(ne==e.value){
isExists=真;
}
});
如果(!isExists){
n、 推动(即价值);
}
});
console.log(n.join(“,”);

console.log(n);
您可以按
类型进行分组

let roomList=[{value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3},{value:5,type:4},{value:6,type:4},{value:7,type:6},{value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12},
结果=数组.from(roomList.reduce((m,o)=>m.set(o.type,(m.get(o.type)| |[])).concat(o)),新映射)。值();
console.log(结果);

。作为控制台包装器{max height:100%!important;top:0;}
您也可以使用ES6
集来处理唯一的问题。然后它是一个reduce/find组合,可以是一个liner:

let roomList=[
{value:1,type:2},{value:2,type:2},{value:3,type:2},{value:4,type:3},
{value:5,type:4},{value:6,type:4},{value:7,type:6},{value:8,type:6},
{value:9,type:1},{value:10,type:8},{value:11,type:8},{value:12,type:8}
];
var结果=u0.reduce(roomList,(r,c,i,a)=>
_.find(a,x=>x.type==c.type&&x.value!=c.value)?r.add(c.value):r,新集合)
console.log(Array.from(result))

您希望此输入的结果是什么?我希望类似于adjascentRoomId=[1,2,3,5,6,7,8,10,11,12]什么是合格的和相邻的房间?您是否试图筛选数组以仅包含重复的值,删除唯一的值?@NinaScholz相邻房间是指类型相同且相邻的房间,例如:房间号:1,2,3相邻,而房间号:4相邻的房间没有相同的类型