Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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

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_Performance_Data Structures_Quadtree - Fatal编程技术网

Javascript 如何找到四叉树的唯一对?

Javascript 如何找到四叉树的唯一对?,javascript,arrays,performance,data-structures,quadtree,Javascript,Arrays,Performance,Data Structures,Quadtree,我使用四叉树数据结构在二维平面上查找附近的对象。我已经实现了一个工作四叉树,它为每个对象返回一个数组,包括它的所有邻居。问题是,我需要这组列表中每个唯一的对象对 假设我在一个数组中有以下点[a,b,c,d]。而且: a接近b b接近c c接近d 所以, a不在c或d附近 b不在d附近 c不在a附近 d不在a或b附近 因此,通过迭代每个对象并询问其邻居,我将得到以下数组,其中每个元素都是自己的数组,其中第一个元素是所讨论的对象,其他每个元素都是它的邻居: [ [a, b], //

我使用四叉树数据结构在二维平面上查找附近的对象。我已经实现了一个工作四叉树,它为每个对象返回一个数组,包括它的所有邻居。问题是,我需要这组列表中每个唯一的对象对

假设我在一个数组中有以下点[a,b,c,d]。而且:

a接近b

b接近c

c接近d

所以,

a不在cd附近

b不在d附近

c不在a附近

d不在ab附近

因此,通过迭代每个对象并询问其邻居,我将得到以下数组,其中每个元素都是自己的数组,其中第一个元素是所讨论的对象,其他每个元素都是它的邻居:

[
  [a, b],       // a is only near b
  [b, a, c],    // So b is near c and also a
  [c, b, d],    // So c is near b and also d
  [d, c]        // d is only near c
]
我希望数组只包含相邻对象的唯一对(例如,同时包含[a,b]和[b,a]是不可接受的),因此在这种情况下,解决方案是:

[
  [a, b],
  [b, c],
  [c, d]
]
我怎样才能达到这个结果


如果代码尽可能优化,我们将不胜感激。非常感谢你

我解决了排序问题,但它在计算上相当昂贵,如果有人知道如何缩短此代码,将不胜感激

let unsortedArray=[
['a','b'],
[b',a',c'],
[c]、[b]、[d],
['d','c']
];
函数求解器(arr){
//分离第一个元素
设群=[];
for(设i=0;i控制台日志(Darray)我一直在思考这些问题

let unsortedArray=[
['a','b'],
[b',a',c'],
[c]、[b]、[d],
['d','c']
];
函数求解器(arr){
设标记={};
让结果=[];
arr.forEach((弧)=>{
让我们先来;
弧.forEach((顶点,i)=>{
如果(i==0){
第一个=顶点;
}否则{
向前=第一个+顶点,向后=顶点+第一个;
如果(!marked.hasOwnProperty(向前)和&!marked.hasOwnProperty(向后)){
结果。推送([第一,顶点]);
}
标记的[前进]=0;
标记的[向后]=0;
}
});
});
返回结果;
}

log(解算器(unsortedArray))显示一个您需要帮助的最小工作示例。@DominiqueFortin我不完全确定您的意思。我不能真正展示代码笔,因为四叉树本身太复杂,无法实现。我只是想要一个函数来过滤数组,从[[a,b],[b,a,c],[c,b,d],[d,c]]到[[a,b],[b,c],[c,d]]。你应该来Stackoverflow寻求一些具体的帮助,不要要求别人为你编写代码。@DominiqueFortin我确信我的问题的解决方案实际上是一个非常简单的Array.filter函数或其他东西,但我不知道怎么做。我已经对这个四叉树和对象进行了编码,但它都是一个更大程序的一部分,不适合codepen示例,即使你不想给我任何代码,你至少可以为我指出一个方向。所以它是具体的,我只是像其他人一样发布一个问题。我会看看我是否能做一个小的代码示例…不,这并不简单。也许使用reduce,但我不确定。