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);
}
控制台日志(结果)你能解释一下你是如何得到你的输入和你是如何产生输出的吗?没有明确的关联。我有一个3JS场景,输入是当我列出相互碰撞的网格ID时得到的。输入数组是我在迭代场景后获得的。在本例中,24碰撞17、17碰撞24、45碰撞17、17碰撞45、38碰撞31和31碰撞38。不幸的是,没有生成输出,因为这是我需要获得的,以便知道我在舞台上有多少个“碰撞网格组”。顺便说一句,知道为什么我的问题得分为-1对我将来会有帮助!尼娜·斯科尔斯:你救了我一天,你的解决方案非常有效,比你好多了!