javascript:根据重复项拆分多维数组

javascript:根据重复项拆分多维数组,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我一直坚持将数组拆分为多个部分,基于成对和重复 我有这个阵列: var array = [[24, 17],[45, 17],[17, 24],[38, 31],[31, 38],[17, 45]]; 我需要将其拆分以获得以下结果: var array = [[24,17,45],[38,31]]; 有人知道正确的方法吗? 任何帮助都将不胜感激 您可以使用的功能,检查其中一个值是否已在一个集合中。如果没有,请使用新的结果集创建新的结果集 var数组=[[24,17],[45,17],[17

我一直坚持将数组拆分为多个部分,基于成对和重复

我有这个阵列:

var array = [[24, 17],[45, 17],[17, 24],[38, 31],[31, 38],[17, 45]];
我需要将其拆分以获得以下结果:

var array = [[24,17,45],[38,31]];
有人知道正确的方法吗?
任何帮助都将不胜感激

您可以使用的功能,检查其中一个值是否已在一个集合中。如果没有,请使用新的结果集创建新的结果集

var数组=[[24,17],[45,17],[17,24],[38,31],[31,38],[17,45],
结果=数组
.减少((r,a)=>{
var s=r.find(s=>a.some(Set.prototype.has,s));
若有(s){
a、 forEach(v=>s.add(v));
}否则{
r、 推(新组(a));
}
返回r;
}, [])
.map(s=>Array.from(s));
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
您可以先将数组展平,然后再展平数组。使用辅助对象,在检测到重复时添加新的子数组。然后,过滤掉空数组:

const数组=[[24,17],[45,17],[17,24],[38,31],[31,38],[17,45];
const helperSet=新集合();
常量结果=[].concat(…数组)
.减少((r,n)=>{
!r[r.length-1]&r.push([]);
如果(!helperSet.has(n)){
r[r.length-1]。推送(n)
helperSet.add(n);
}否则{
r、 推送([]);
};
返回r;
}, [])
.filter(({length})=>length);

控制台日志(结果)您可以使用哈希表将特定网格映射到碰撞,以便可以轻松地对其进行分组:

const数组=[[24,17]、[45,17]、[17,24]、[38,31]、[31,38]、[17,45];
const result=[],hash={};
for(数组的常数[a,b]{
设group=hash[a]| | hash[b]|(arr=>(result.push(arr),hash[a]=hash[b]=arr))([]);
如果(!组包括(a))组推送(a);
如果(!组包括(b))组推送(b);
}

控制台日志(结果)